/*
 *
 *    Copyright (c) 2021 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP

package chip.devicecontroller;

import java.util.List;

public class ChipClusters {

  public interface DefaultClusterCallback {
    void onSuccess();

    void onError(Exception error);
  }

  public interface CharStringAttributeCallback {
    /** Indicates a successful read for a CHAR_STRING attribute. */
    void onSuccess(String value);

    void onError(Exception error);
  }

  public interface OctetStringAttributeCallback {
    /** Indicates a successful read for an OCTET_STRING attribute. */
    void onSuccess(byte[] value);

    void onError(Exception error);
  }

  public interface IntegerAttributeCallback {
    void onSuccess(int value);

    void onError(Exception error);
  }

  public interface LongAttributeCallback {
    void onSuccess(long value);

    void onError(Exception error);
  }

  public interface BooleanAttributeCallback {
    void onSuccess(boolean value);

    void onError(Exception error);
  }

  public abstract static class BaseChipCluster {
    protected long chipClusterPtr;

    public BaseChipCluster(long devicePtr, int endpointId) {
      chipClusterPtr = initWithDevice(devicePtr, endpointId);
    }

    public abstract long initWithDevice(long devicePtr, int endpointId);

    public native void deleteCluster(long chipClusterPtr);

    @SuppressWarnings("deprecation")
    protected void finalize() throws Throwable {
      super.finalize();

      if (chipClusterPtr != 0) {
        deleteCluster(chipClusterPtr);
        chipClusterPtr = 0;
      }
    }
  }

  public static class AccountLoginCluster extends BaseChipCluster {
    public AccountLoginCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void getSetupPIN(GetSetupPINResponseCallback callback, String tempAccountIdentifier) {
      getSetupPIN(chipClusterPtr, callback, tempAccountIdentifier);
    }

    public void login(
        DefaultClusterCallback callback, String tempAccountIdentifier, String setupPIN) {
      login(chipClusterPtr, callback, tempAccountIdentifier, setupPIN);
    }

    private native void getSetupPIN(
        long chipClusterPtr, GetSetupPINResponseCallback callback, String tempAccountIdentifier);

    private native void login(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        String tempAccountIdentifier,
        String setupPIN);

    public interface GetSetupPINResponseCallback {
      void onSuccess(String setupPIN);

      void onError(Exception error);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class AdministratorCommissioningCluster extends BaseChipCluster {
    public AdministratorCommissioningCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void openBasicCommissioningWindow(
        DefaultClusterCallback callback, int commissioningTimeout) {
      openBasicCommissioningWindow(chipClusterPtr, callback, commissioningTimeout);
    }

    public void openCommissioningWindow(
        DefaultClusterCallback callback,
        int commissioningTimeout,
        byte[] pAKEVerifier,
        int discriminator,
        long iterations,
        byte[] salt,
        int passcodeID) {
      openCommissioningWindow(
          chipClusterPtr,
          callback,
          commissioningTimeout,
          pAKEVerifier,
          discriminator,
          iterations,
          salt,
          passcodeID);
    }

    public void revokeCommissioning(DefaultClusterCallback callback) {
      revokeCommissioning(chipClusterPtr, callback);
    }

    private native void openBasicCommissioningWindow(
        long chipClusterPtr, DefaultClusterCallback callback, int commissioningTimeout);

    private native void openCommissioningWindow(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int commissioningTimeout,
        byte[] pAKEVerifier,
        int discriminator,
        long iterations,
        byte[] salt,
        int passcodeID);

    private native void revokeCommissioning(long chipClusterPtr, DefaultClusterCallback callback);

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ApplicationBasicCluster extends BaseChipCluster {
    public ApplicationBasicCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void changeStatus(DefaultClusterCallback callback, int status) {
      changeStatus(chipClusterPtr, callback, status);
    }

    private native void changeStatus(
        long chipClusterPtr, DefaultClusterCallback callback, int status);

    public void readVendorNameAttribute(CharStringAttributeCallback callback) {
      readVendorNameAttribute(chipClusterPtr, callback);
    }

    public void readVendorIdAttribute(IntegerAttributeCallback callback) {
      readVendorIdAttribute(chipClusterPtr, callback);
    }

    public void readApplicationNameAttribute(CharStringAttributeCallback callback) {
      readApplicationNameAttribute(chipClusterPtr, callback);
    }

    public void readProductIdAttribute(IntegerAttributeCallback callback) {
      readProductIdAttribute(chipClusterPtr, callback);
    }

    public void readApplicationIdAttribute(CharStringAttributeCallback callback) {
      readApplicationIdAttribute(chipClusterPtr, callback);
    }

    public void readCatalogVendorIdAttribute(IntegerAttributeCallback callback) {
      readCatalogVendorIdAttribute(chipClusterPtr, callback);
    }

    public void readApplicationStatusAttribute(IntegerAttributeCallback callback) {
      readApplicationStatusAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readVendorNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readVendorIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readApplicationNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readApplicationIdAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readCatalogVendorIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readApplicationStatusAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ApplicationLauncherCluster extends BaseChipCluster {
    public ApplicationLauncherCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void launchApp(
        LaunchAppResponseCallback callback,
        String data,
        int catalogVendorId,
        String applicationId) {
      launchApp(chipClusterPtr, callback, data, catalogVendorId, applicationId);
    }

    private native void launchApp(
        long chipClusterPtr,
        LaunchAppResponseCallback callback,
        String data,
        int catalogVendorId,
        String applicationId);

    public interface LaunchAppResponseCallback {
      void onSuccess(int status, String data);

      void onError(Exception error);
    }

    public interface ApplicationLauncherListAttributeCallback {
      void onSuccess(List<Integer> valueList);

      void onError(Exception ex);
    }

    public void readApplicationLauncherListAttribute(
        ApplicationLauncherListAttributeCallback callback) {
      readApplicationLauncherListAttribute(chipClusterPtr, callback);
    }

    public void readCatalogVendorIdAttribute(IntegerAttributeCallback callback) {
      readCatalogVendorIdAttribute(chipClusterPtr, callback);
    }

    public void readApplicationIdAttribute(IntegerAttributeCallback callback) {
      readApplicationIdAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readApplicationLauncherListAttribute(
        long chipClusterPtr, ApplicationLauncherListAttributeCallback callback);

    private native void readCatalogVendorIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readApplicationIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class AudioOutputCluster extends BaseChipCluster {
    public AudioOutputCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void renameOutput(DefaultClusterCallback callback, int index, String name) {
      renameOutput(chipClusterPtr, callback, index, name);
    }

    public void selectOutput(DefaultClusterCallback callback, int index) {
      selectOutput(chipClusterPtr, callback, index);
    }

    private native void renameOutput(
        long chipClusterPtr, DefaultClusterCallback callback, int index, String name);

    private native void selectOutput(
        long chipClusterPtr, DefaultClusterCallback callback, int index);

    public static class AudioOutputListAttribute {
      public int index;
      public int outputType;
      public byte[] name;

      public AudioOutputListAttribute(int index, int outputType, byte[] name) {
        this.index = index;
        this.outputType = outputType;
        this.name = name;
      }
    }

    public interface AudioOutputListAttributeCallback {
      void onSuccess(List<AudioOutputListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readAudioOutputListAttribute(AudioOutputListAttributeCallback callback) {
      readAudioOutputListAttribute(chipClusterPtr, callback);
    }

    public void readCurrentAudioOutputAttribute(IntegerAttributeCallback callback) {
      readCurrentAudioOutputAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readAudioOutputListAttribute(
        long chipClusterPtr, AudioOutputListAttributeCallback callback);

    private native void readCurrentAudioOutputAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class BarrierControlCluster extends BaseChipCluster {
    public BarrierControlCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void barrierControlGoToPercent(DefaultClusterCallback callback, int percentOpen) {
      barrierControlGoToPercent(chipClusterPtr, callback, percentOpen);
    }

    public void barrierControlStop(DefaultClusterCallback callback) {
      barrierControlStop(chipClusterPtr, callback);
    }

    private native void barrierControlGoToPercent(
        long chipClusterPtr, DefaultClusterCallback callback, int percentOpen);

    private native void barrierControlStop(long chipClusterPtr, DefaultClusterCallback callback);

    public void readBarrierMovingStateAttribute(IntegerAttributeCallback callback) {
      readBarrierMovingStateAttribute(chipClusterPtr, callback);
    }

    public void readBarrierSafetyStatusAttribute(IntegerAttributeCallback callback) {
      readBarrierSafetyStatusAttribute(chipClusterPtr, callback);
    }

    public void readBarrierCapabilitiesAttribute(IntegerAttributeCallback callback) {
      readBarrierCapabilitiesAttribute(chipClusterPtr, callback);
    }

    public void readBarrierPositionAttribute(IntegerAttributeCallback callback) {
      readBarrierPositionAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readBarrierMovingStateAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readBarrierSafetyStatusAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readBarrierCapabilitiesAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readBarrierPositionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class BasicCluster extends BaseChipCluster {
    public BasicCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void mfgSpecificPing(DefaultClusterCallback callback) {
      mfgSpecificPing(chipClusterPtr, callback);
    }

    private native void mfgSpecificPing(long chipClusterPtr, DefaultClusterCallback callback);

    public void readInteractionModelVersionAttribute(IntegerAttributeCallback callback) {
      readInteractionModelVersionAttribute(chipClusterPtr, callback);
    }

    public void readVendorNameAttribute(CharStringAttributeCallback callback) {
      readVendorNameAttribute(chipClusterPtr, callback);
    }

    public void readVendorIDAttribute(IntegerAttributeCallback callback) {
      readVendorIDAttribute(chipClusterPtr, callback);
    }

    public void readProductNameAttribute(CharStringAttributeCallback callback) {
      readProductNameAttribute(chipClusterPtr, callback);
    }

    public void readProductIDAttribute(IntegerAttributeCallback callback) {
      readProductIDAttribute(chipClusterPtr, callback);
    }

    public void readUserLabelAttribute(CharStringAttributeCallback callback) {
      readUserLabelAttribute(chipClusterPtr, callback);
    }

    public void writeUserLabelAttribute(DefaultClusterCallback callback, String value) {
      writeUserLabelAttribute(chipClusterPtr, callback, value);
    }

    public void readLocationAttribute(CharStringAttributeCallback callback) {
      readLocationAttribute(chipClusterPtr, callback);
    }

    public void writeLocationAttribute(DefaultClusterCallback callback, String value) {
      writeLocationAttribute(chipClusterPtr, callback, value);
    }

    public void readHardwareVersionAttribute(IntegerAttributeCallback callback) {
      readHardwareVersionAttribute(chipClusterPtr, callback);
    }

    public void readHardwareVersionStringAttribute(CharStringAttributeCallback callback) {
      readHardwareVersionStringAttribute(chipClusterPtr, callback);
    }

    public void readSoftwareVersionAttribute(LongAttributeCallback callback) {
      readSoftwareVersionAttribute(chipClusterPtr, callback);
    }

    public void readSoftwareVersionStringAttribute(CharStringAttributeCallback callback) {
      readSoftwareVersionStringAttribute(chipClusterPtr, callback);
    }

    public void readManufacturingDateAttribute(CharStringAttributeCallback callback) {
      readManufacturingDateAttribute(chipClusterPtr, callback);
    }

    public void readPartNumberAttribute(CharStringAttributeCallback callback) {
      readPartNumberAttribute(chipClusterPtr, callback);
    }

    public void readProductURLAttribute(CharStringAttributeCallback callback) {
      readProductURLAttribute(chipClusterPtr, callback);
    }

    public void readProductLabelAttribute(CharStringAttributeCallback callback) {
      readProductLabelAttribute(chipClusterPtr, callback);
    }

    public void readSerialNumberAttribute(CharStringAttributeCallback callback) {
      readSerialNumberAttribute(chipClusterPtr, callback);
    }

    public void readLocalConfigDisabledAttribute(BooleanAttributeCallback callback) {
      readLocalConfigDisabledAttribute(chipClusterPtr, callback);
    }

    public void writeLocalConfigDisabledAttribute(DefaultClusterCallback callback, boolean value) {
      writeLocalConfigDisabledAttribute(chipClusterPtr, callback, value);
    }

    public void readReachableAttribute(BooleanAttributeCallback callback) {
      readReachableAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readInteractionModelVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readVendorNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readVendorIDAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readProductNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductIDAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readUserLabelAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void writeUserLabelAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, String value);

    private native void readLocationAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void writeLocationAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, String value);

    private native void readHardwareVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readHardwareVersionStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readSoftwareVersionAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readSoftwareVersionStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readManufacturingDateAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readPartNumberAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductURLAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductLabelAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readSerialNumberAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readLocalConfigDisabledAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void writeLocalConfigDisabledAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, boolean value);

    private native void readReachableAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class BinaryInputBasicCluster extends BaseChipCluster {
    public BinaryInputBasicCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readOutOfServiceAttribute(BooleanAttributeCallback callback) {
      readOutOfServiceAttribute(chipClusterPtr, callback);
    }

    public void writeOutOfServiceAttribute(DefaultClusterCallback callback, boolean value) {
      writeOutOfServiceAttribute(chipClusterPtr, callback, value);
    }

    public void readPresentValueAttribute(BooleanAttributeCallback callback) {
      readPresentValueAttribute(chipClusterPtr, callback);
    }

    public void writePresentValueAttribute(DefaultClusterCallback callback, boolean value) {
      writePresentValueAttribute(chipClusterPtr, callback, value);
    }

    public void readStatusFlagsAttribute(IntegerAttributeCallback callback) {
      readStatusFlagsAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readOutOfServiceAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void writeOutOfServiceAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, boolean value);

    private native void readPresentValueAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void writePresentValueAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, boolean value);

    private native void readStatusFlagsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class BindingCluster extends BaseChipCluster {
    public BindingCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void bind(
        DefaultClusterCallback callback, long nodeId, int groupId, int endpointId, long clusterId) {
      bind(chipClusterPtr, callback, nodeId, groupId, endpointId, clusterId);
    }

    public void unbind(
        DefaultClusterCallback callback, long nodeId, int groupId, int endpointId, long clusterId) {
      unbind(chipClusterPtr, callback, nodeId, groupId, endpointId, clusterId);
    }

    private native void bind(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        long nodeId,
        int groupId,
        int endpointId,
        long clusterId);

    private native void unbind(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        long nodeId,
        int groupId,
        int endpointId,
        long clusterId);

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class BridgedDeviceBasicCluster extends BaseChipCluster {
    public BridgedDeviceBasicCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readVendorNameAttribute(CharStringAttributeCallback callback) {
      readVendorNameAttribute(chipClusterPtr, callback);
    }

    public void readVendorIDAttribute(IntegerAttributeCallback callback) {
      readVendorIDAttribute(chipClusterPtr, callback);
    }

    public void readProductNameAttribute(CharStringAttributeCallback callback) {
      readProductNameAttribute(chipClusterPtr, callback);
    }

    public void readUserLabelAttribute(CharStringAttributeCallback callback) {
      readUserLabelAttribute(chipClusterPtr, callback);
    }

    public void writeUserLabelAttribute(DefaultClusterCallback callback, String value) {
      writeUserLabelAttribute(chipClusterPtr, callback, value);
    }

    public void readHardwareVersionAttribute(IntegerAttributeCallback callback) {
      readHardwareVersionAttribute(chipClusterPtr, callback);
    }

    public void readHardwareVersionStringAttribute(CharStringAttributeCallback callback) {
      readHardwareVersionStringAttribute(chipClusterPtr, callback);
    }

    public void readSoftwareVersionAttribute(LongAttributeCallback callback) {
      readSoftwareVersionAttribute(chipClusterPtr, callback);
    }

    public void readSoftwareVersionStringAttribute(CharStringAttributeCallback callback) {
      readSoftwareVersionStringAttribute(chipClusterPtr, callback);
    }

    public void readManufacturingDateAttribute(CharStringAttributeCallback callback) {
      readManufacturingDateAttribute(chipClusterPtr, callback);
    }

    public void readPartNumberAttribute(CharStringAttributeCallback callback) {
      readPartNumberAttribute(chipClusterPtr, callback);
    }

    public void readProductURLAttribute(CharStringAttributeCallback callback) {
      readProductURLAttribute(chipClusterPtr, callback);
    }

    public void readProductLabelAttribute(CharStringAttributeCallback callback) {
      readProductLabelAttribute(chipClusterPtr, callback);
    }

    public void readSerialNumberAttribute(CharStringAttributeCallback callback) {
      readSerialNumberAttribute(chipClusterPtr, callback);
    }

    public void readReachableAttribute(BooleanAttributeCallback callback) {
      readReachableAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readVendorNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readVendorIDAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readProductNameAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readUserLabelAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void writeUserLabelAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, String value);

    private native void readHardwareVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readHardwareVersionStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readSoftwareVersionAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readSoftwareVersionStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readManufacturingDateAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readPartNumberAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductURLAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readProductLabelAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readSerialNumberAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readReachableAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ColorControlCluster extends BaseChipCluster {
    public ColorControlCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void colorLoopSet(
        DefaultClusterCallback callback,
        int updateFlags,
        int action,
        int direction,
        int time,
        int startHue,
        int optionsMask,
        int optionsOverride) {
      colorLoopSet(
          chipClusterPtr,
          callback,
          updateFlags,
          action,
          direction,
          time,
          startHue,
          optionsMask,
          optionsOverride);
    }

    public void enhancedMoveHue(
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride) {
      enhancedMoveHue(chipClusterPtr, callback, moveMode, rate, optionsMask, optionsOverride);
    }

    public void enhancedMoveToHue(
        DefaultClusterCallback callback,
        int enhancedHue,
        int direction,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      enhancedMoveToHue(
          chipClusterPtr,
          callback,
          enhancedHue,
          direction,
          transitionTime,
          optionsMask,
          optionsOverride);
    }

    public void enhancedMoveToHueAndSaturation(
        DefaultClusterCallback callback,
        int enhancedHue,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      enhancedMoveToHueAndSaturation(
          chipClusterPtr,
          callback,
          enhancedHue,
          saturation,
          transitionTime,
          optionsMask,
          optionsOverride);
    }

    public void enhancedStepHue(
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      enhancedStepHue(
          chipClusterPtr,
          callback,
          stepMode,
          stepSize,
          transitionTime,
          optionsMask,
          optionsOverride);
    }

    public void moveColor(
        DefaultClusterCallback callback,
        int rateX,
        int rateY,
        int optionsMask,
        int optionsOverride) {
      moveColor(chipClusterPtr, callback, rateX, rateY, optionsMask, optionsOverride);
    }

    public void moveColorTemperature(
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int colorTemperatureMinimum,
        int colorTemperatureMaximum,
        int optionsMask,
        int optionsOverride) {
      moveColorTemperature(
          chipClusterPtr,
          callback,
          moveMode,
          rate,
          colorTemperatureMinimum,
          colorTemperatureMaximum,
          optionsMask,
          optionsOverride);
    }

    public void moveHue(
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride) {
      moveHue(chipClusterPtr, callback, moveMode, rate, optionsMask, optionsOverride);
    }

    public void moveSaturation(
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride) {
      moveSaturation(chipClusterPtr, callback, moveMode, rate, optionsMask, optionsOverride);
    }

    public void moveToColor(
        DefaultClusterCallback callback,
        int colorX,
        int colorY,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      moveToColor(
          chipClusterPtr, callback, colorX, colorY, transitionTime, optionsMask, optionsOverride);
    }

    public void moveToColorTemperature(
        DefaultClusterCallback callback,
        int colorTemperature,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      moveToColorTemperature(
          chipClusterPtr, callback, colorTemperature, transitionTime, optionsMask, optionsOverride);
    }

    public void moveToHue(
        DefaultClusterCallback callback,
        int hue,
        int direction,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      moveToHue(
          chipClusterPtr, callback, hue, direction, transitionTime, optionsMask, optionsOverride);
    }

    public void moveToHueAndSaturation(
        DefaultClusterCallback callback,
        int hue,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      moveToHueAndSaturation(
          chipClusterPtr, callback, hue, saturation, transitionTime, optionsMask, optionsOverride);
    }

    public void moveToSaturation(
        DefaultClusterCallback callback,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      moveToSaturation(
          chipClusterPtr, callback, saturation, transitionTime, optionsMask, optionsOverride);
    }

    public void stepColor(
        DefaultClusterCallback callback,
        int stepX,
        int stepY,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      stepColor(
          chipClusterPtr, callback, stepX, stepY, transitionTime, optionsMask, optionsOverride);
    }

    public void stepColorTemperature(
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int colorTemperatureMinimum,
        int colorTemperatureMaximum,
        int optionsMask,
        int optionsOverride) {
      stepColorTemperature(
          chipClusterPtr,
          callback,
          stepMode,
          stepSize,
          transitionTime,
          colorTemperatureMinimum,
          colorTemperatureMaximum,
          optionsMask,
          optionsOverride);
    }

    public void stepHue(
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      stepHue(
          chipClusterPtr,
          callback,
          stepMode,
          stepSize,
          transitionTime,
          optionsMask,
          optionsOverride);
    }

    public void stepSaturation(
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride) {
      stepSaturation(
          chipClusterPtr,
          callback,
          stepMode,
          stepSize,
          transitionTime,
          optionsMask,
          optionsOverride);
    }

    public void stopMoveStep(
        DefaultClusterCallback callback, int optionsMask, int optionsOverride) {
      stopMoveStep(chipClusterPtr, callback, optionsMask, optionsOverride);
    }

    private native void colorLoopSet(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int updateFlags,
        int action,
        int direction,
        int time,
        int startHue,
        int optionsMask,
        int optionsOverride);

    private native void enhancedMoveHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride);

    private native void enhancedMoveToHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int enhancedHue,
        int direction,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void enhancedMoveToHueAndSaturation(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int enhancedHue,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void enhancedStepHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void moveColor(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int rateX,
        int rateY,
        int optionsMask,
        int optionsOverride);

    private native void moveColorTemperature(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int colorTemperatureMinimum,
        int colorTemperatureMaximum,
        int optionsMask,
        int optionsOverride);

    private native void moveHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride);

    private native void moveSaturation(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionsMask,
        int optionsOverride);

    private native void moveToColor(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int colorX,
        int colorY,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void moveToColorTemperature(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int colorTemperature,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void moveToHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int hue,
        int direction,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void moveToHueAndSaturation(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int hue,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void moveToSaturation(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int saturation,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void stepColor(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepX,
        int stepY,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void stepColorTemperature(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int colorTemperatureMinimum,
        int colorTemperatureMaximum,
        int optionsMask,
        int optionsOverride);

    private native void stepHue(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void stepSaturation(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionsMask,
        int optionsOverride);

    private native void stopMoveStep(
        long chipClusterPtr, DefaultClusterCallback callback, int optionsMask, int optionsOverride);

    public void readCurrentHueAttribute(IntegerAttributeCallback callback) {
      readCurrentHueAttribute(chipClusterPtr, callback);
    }

    public void readCurrentSaturationAttribute(IntegerAttributeCallback callback) {
      readCurrentSaturationAttribute(chipClusterPtr, callback);
    }

    public void readRemainingTimeAttribute(IntegerAttributeCallback callback) {
      readRemainingTimeAttribute(chipClusterPtr, callback);
    }

    public void readCurrentXAttribute(IntegerAttributeCallback callback) {
      readCurrentXAttribute(chipClusterPtr, callback);
    }

    public void readCurrentYAttribute(IntegerAttributeCallback callback) {
      readCurrentYAttribute(chipClusterPtr, callback);
    }

    public void readDriftCompensationAttribute(IntegerAttributeCallback callback) {
      readDriftCompensationAttribute(chipClusterPtr, callback);
    }

    public void readCompensationTextAttribute(CharStringAttributeCallback callback) {
      readCompensationTextAttribute(chipClusterPtr, callback);
    }

    public void readColorTemperatureAttribute(IntegerAttributeCallback callback) {
      readColorTemperatureAttribute(chipClusterPtr, callback);
    }

    public void readColorModeAttribute(IntegerAttributeCallback callback) {
      readColorModeAttribute(chipClusterPtr, callback);
    }

    public void readColorControlOptionsAttribute(IntegerAttributeCallback callback) {
      readColorControlOptionsAttribute(chipClusterPtr, callback);
    }

    public void writeColorControlOptionsAttribute(DefaultClusterCallback callback, int value) {
      writeColorControlOptionsAttribute(chipClusterPtr, callback, value);
    }

    public void readNumberOfPrimariesAttribute(IntegerAttributeCallback callback) {
      readNumberOfPrimariesAttribute(chipClusterPtr, callback);
    }

    public void readPrimary1XAttribute(IntegerAttributeCallback callback) {
      readPrimary1XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary1YAttribute(IntegerAttributeCallback callback) {
      readPrimary1YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary1IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary1IntensityAttribute(chipClusterPtr, callback);
    }

    public void readPrimary2XAttribute(IntegerAttributeCallback callback) {
      readPrimary2XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary2YAttribute(IntegerAttributeCallback callback) {
      readPrimary2YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary2IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary2IntensityAttribute(chipClusterPtr, callback);
    }

    public void readPrimary3XAttribute(IntegerAttributeCallback callback) {
      readPrimary3XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary3YAttribute(IntegerAttributeCallback callback) {
      readPrimary3YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary3IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary3IntensityAttribute(chipClusterPtr, callback);
    }

    public void readPrimary4XAttribute(IntegerAttributeCallback callback) {
      readPrimary4XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary4YAttribute(IntegerAttributeCallback callback) {
      readPrimary4YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary4IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary4IntensityAttribute(chipClusterPtr, callback);
    }

    public void readPrimary5XAttribute(IntegerAttributeCallback callback) {
      readPrimary5XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary5YAttribute(IntegerAttributeCallback callback) {
      readPrimary5YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary5IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary5IntensityAttribute(chipClusterPtr, callback);
    }

    public void readPrimary6XAttribute(IntegerAttributeCallback callback) {
      readPrimary6XAttribute(chipClusterPtr, callback);
    }

    public void readPrimary6YAttribute(IntegerAttributeCallback callback) {
      readPrimary6YAttribute(chipClusterPtr, callback);
    }

    public void readPrimary6IntensityAttribute(IntegerAttributeCallback callback) {
      readPrimary6IntensityAttribute(chipClusterPtr, callback);
    }

    public void readWhitePointXAttribute(IntegerAttributeCallback callback) {
      readWhitePointXAttribute(chipClusterPtr, callback);
    }

    public void writeWhitePointXAttribute(DefaultClusterCallback callback, int value) {
      writeWhitePointXAttribute(chipClusterPtr, callback, value);
    }

    public void readWhitePointYAttribute(IntegerAttributeCallback callback) {
      readWhitePointYAttribute(chipClusterPtr, callback);
    }

    public void writeWhitePointYAttribute(DefaultClusterCallback callback, int value) {
      writeWhitePointYAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointRXAttribute(IntegerAttributeCallback callback) {
      readColorPointRXAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointRXAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointRXAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointRYAttribute(IntegerAttributeCallback callback) {
      readColorPointRYAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointRYAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointRYAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointRIntensityAttribute(IntegerAttributeCallback callback) {
      readColorPointRIntensityAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointRIntensityAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointRIntensityAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointGXAttribute(IntegerAttributeCallback callback) {
      readColorPointGXAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointGXAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointGXAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointGYAttribute(IntegerAttributeCallback callback) {
      readColorPointGYAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointGYAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointGYAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointGIntensityAttribute(IntegerAttributeCallback callback) {
      readColorPointGIntensityAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointGIntensityAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointGIntensityAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointBXAttribute(IntegerAttributeCallback callback) {
      readColorPointBXAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointBXAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointBXAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointBYAttribute(IntegerAttributeCallback callback) {
      readColorPointBYAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointBYAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointBYAttribute(chipClusterPtr, callback, value);
    }

    public void readColorPointBIntensityAttribute(IntegerAttributeCallback callback) {
      readColorPointBIntensityAttribute(chipClusterPtr, callback);
    }

    public void writeColorPointBIntensityAttribute(DefaultClusterCallback callback, int value) {
      writeColorPointBIntensityAttribute(chipClusterPtr, callback, value);
    }

    public void readEnhancedCurrentHueAttribute(IntegerAttributeCallback callback) {
      readEnhancedCurrentHueAttribute(chipClusterPtr, callback);
    }

    public void readEnhancedColorModeAttribute(IntegerAttributeCallback callback) {
      readEnhancedColorModeAttribute(chipClusterPtr, callback);
    }

    public void readColorLoopActiveAttribute(IntegerAttributeCallback callback) {
      readColorLoopActiveAttribute(chipClusterPtr, callback);
    }

    public void readColorLoopDirectionAttribute(IntegerAttributeCallback callback) {
      readColorLoopDirectionAttribute(chipClusterPtr, callback);
    }

    public void readColorLoopTimeAttribute(IntegerAttributeCallback callback) {
      readColorLoopTimeAttribute(chipClusterPtr, callback);
    }

    public void readColorCapabilitiesAttribute(IntegerAttributeCallback callback) {
      readColorCapabilitiesAttribute(chipClusterPtr, callback);
    }

    public void readColorTempPhysicalMinAttribute(IntegerAttributeCallback callback) {
      readColorTempPhysicalMinAttribute(chipClusterPtr, callback);
    }

    public void readColorTempPhysicalMaxAttribute(IntegerAttributeCallback callback) {
      readColorTempPhysicalMaxAttribute(chipClusterPtr, callback);
    }

    public void readCoupleColorTempToLevelMinMiredsAttribute(IntegerAttributeCallback callback) {
      readCoupleColorTempToLevelMinMiredsAttribute(chipClusterPtr, callback);
    }

    public void readStartUpColorTemperatureMiredsAttribute(IntegerAttributeCallback callback) {
      readStartUpColorTemperatureMiredsAttribute(chipClusterPtr, callback);
    }

    public void writeStartUpColorTemperatureMiredsAttribute(
        DefaultClusterCallback callback, int value) {
      writeStartUpColorTemperatureMiredsAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readCurrentHueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentSaturationAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRemainingTimeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentXAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentYAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readDriftCompensationAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCompensationTextAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readColorTemperatureAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorControlOptionsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorControlOptionsAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readNumberOfPrimariesAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary1XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary1YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary1IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary2XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary2YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary2IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary3XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary3YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary3IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary4XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary4YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary4IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary5XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary5YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary5IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary6XAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary6YAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPrimary6IntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readWhitePointXAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeWhitePointXAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readWhitePointYAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeWhitePointYAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointRXAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointRXAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointRYAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointRYAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointRIntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointRIntensityAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointGXAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointGXAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointGYAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointGYAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointGIntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointGIntensityAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointBXAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointBXAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointBYAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointBYAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readColorPointBIntensityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeColorPointBIntensityAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readEnhancedCurrentHueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readEnhancedColorModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorLoopActiveAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorLoopDirectionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorLoopTimeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorCapabilitiesAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorTempPhysicalMinAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readColorTempPhysicalMaxAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCoupleColorTempToLevelMinMiredsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readStartUpColorTemperatureMiredsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeStartUpColorTemperatureMiredsAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ContentLauncherCluster extends BaseChipCluster {
    public ContentLauncherCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void launchContent(
        LaunchContentResponseCallback callback, boolean autoPlay, String data) {
      launchContent(chipClusterPtr, callback, autoPlay, data);
    }

    public void launchURL(
        LaunchURLResponseCallback callback, String contentURL, String displayString) {
      launchURL(chipClusterPtr, callback, contentURL, displayString);
    }

    private native void launchContent(
        long chipClusterPtr, LaunchContentResponseCallback callback, boolean autoPlay, String data);

    private native void launchURL(
        long chipClusterPtr,
        LaunchURLResponseCallback callback,
        String contentURL,
        String displayString);

    public interface LaunchContentResponseCallback {
      void onSuccess(String data, int contentLaunchStatus);

      void onError(Exception error);
    }

    public interface LaunchURLResponseCallback {
      void onSuccess(String data, int contentLaunchStatus);

      void onError(Exception error);
    }

    public interface AcceptsHeaderListAttributeCallback {
      void onSuccess(List<byte[]> valueList);

      void onError(Exception ex);
    }

    public interface SupportedStreamingTypesAttributeCallback {
      void onSuccess(List<Integer> valueList);

      void onError(Exception ex);
    }

    public void readAcceptsHeaderListAttribute(AcceptsHeaderListAttributeCallback callback) {
      readAcceptsHeaderListAttribute(chipClusterPtr, callback);
    }

    public void readSupportedStreamingTypesAttribute(
        SupportedStreamingTypesAttributeCallback callback) {
      readSupportedStreamingTypesAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readAcceptsHeaderListAttribute(
        long chipClusterPtr, AcceptsHeaderListAttributeCallback callback);

    private native void readSupportedStreamingTypesAttribute(
        long chipClusterPtr, SupportedStreamingTypesAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class DescriptorCluster extends BaseChipCluster {
    public DescriptorCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public static class DeviceListAttribute {
      public long type;
      public int revision;

      public DeviceListAttribute(long type, int revision) {
        this.type = type;
        this.revision = revision;
      }
    }

    public interface DeviceListAttributeCallback {
      void onSuccess(List<DeviceListAttribute> valueList);

      void onError(Exception ex);
    }

    public interface ServerListAttributeCallback {
      void onSuccess(List<Long> valueList);

      void onError(Exception ex);
    }

    public interface ClientListAttributeCallback {
      void onSuccess(List<Long> valueList);

      void onError(Exception ex);
    }

    public interface PartsListAttributeCallback {
      void onSuccess(List<Integer> valueList);

      void onError(Exception ex);
    }

    public void readDeviceListAttribute(DeviceListAttributeCallback callback) {
      readDeviceListAttribute(chipClusterPtr, callback);
    }

    public void readServerListAttribute(ServerListAttributeCallback callback) {
      readServerListAttribute(chipClusterPtr, callback);
    }

    public void readClientListAttribute(ClientListAttributeCallback callback) {
      readClientListAttribute(chipClusterPtr, callback);
    }

    public void readPartsListAttribute(PartsListAttributeCallback callback) {
      readPartsListAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readDeviceListAttribute(
        long chipClusterPtr, DeviceListAttributeCallback callback);

    private native void readServerListAttribute(
        long chipClusterPtr, ServerListAttributeCallback callback);

    private native void readClientListAttribute(
        long chipClusterPtr, ClientListAttributeCallback callback);

    private native void readPartsListAttribute(
        long chipClusterPtr, PartsListAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class DiagnosticLogsCluster extends BaseChipCluster {
    public DiagnosticLogsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void retrieveLogsRequest(
        DefaultClusterCallback callback,
        int intent,
        int requestedProtocol,
        byte[] transferFileDesignator) {
      retrieveLogsRequest(
          chipClusterPtr, callback, intent, requestedProtocol, transferFileDesignator);
    }

    private native void retrieveLogsRequest(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int intent,
        int requestedProtocol,
        byte[] transferFileDesignator);
  }

  public static class DoorLockCluster extends BaseChipCluster {
    public DoorLockCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void clearAllPins(ClearAllPinsResponseCallback callback) {
      clearAllPins(chipClusterPtr, callback);
    }

    public void clearAllRfids(ClearAllRfidsResponseCallback callback) {
      clearAllRfids(chipClusterPtr, callback);
    }

    public void clearHolidaySchedule(
        ClearHolidayScheduleResponseCallback callback, int scheduleId) {
      clearHolidaySchedule(chipClusterPtr, callback, scheduleId);
    }

    public void clearPin(ClearPinResponseCallback callback, int userId) {
      clearPin(chipClusterPtr, callback, userId);
    }

    public void clearRfid(ClearRfidResponseCallback callback, int userId) {
      clearRfid(chipClusterPtr, callback, userId);
    }

    public void clearWeekdaySchedule(
        ClearWeekdayScheduleResponseCallback callback, int scheduleId, int userId) {
      clearWeekdaySchedule(chipClusterPtr, callback, scheduleId, userId);
    }

    public void clearYeardaySchedule(
        ClearYeardayScheduleResponseCallback callback, int scheduleId, int userId) {
      clearYeardaySchedule(chipClusterPtr, callback, scheduleId, userId);
    }

    public void getHolidaySchedule(GetHolidayScheduleResponseCallback callback, int scheduleId) {
      getHolidaySchedule(chipClusterPtr, callback, scheduleId);
    }

    public void getLogRecord(GetLogRecordResponseCallback callback, int logIndex) {
      getLogRecord(chipClusterPtr, callback, logIndex);
    }

    public void getPin(GetPinResponseCallback callback, int userId) {
      getPin(chipClusterPtr, callback, userId);
    }

    public void getRfid(GetRfidResponseCallback callback, int userId) {
      getRfid(chipClusterPtr, callback, userId);
    }

    public void getUserType(GetUserTypeResponseCallback callback, int userId) {
      getUserType(chipClusterPtr, callback, userId);
    }

    public void getWeekdaySchedule(
        GetWeekdayScheduleResponseCallback callback, int scheduleId, int userId) {
      getWeekdaySchedule(chipClusterPtr, callback, scheduleId, userId);
    }

    public void getYeardaySchedule(
        GetYeardayScheduleResponseCallback callback, int scheduleId, int userId) {
      getYeardaySchedule(chipClusterPtr, callback, scheduleId, userId);
    }

    public void lockDoor(LockDoorResponseCallback callback, String pin) {
      lockDoor(chipClusterPtr, callback, pin);
    }

    public void setHolidaySchedule(
        SetHolidayScheduleResponseCallback callback,
        int scheduleId,
        long localStartTime,
        long localEndTime,
        int operatingModeDuringHoliday) {
      setHolidaySchedule(
          chipClusterPtr,
          callback,
          scheduleId,
          localStartTime,
          localEndTime,
          operatingModeDuringHoliday);
    }

    public void setPin(
        SetPinResponseCallback callback, int userId, int userStatus, int userType, String pin) {
      setPin(chipClusterPtr, callback, userId, userStatus, userType, pin);
    }

    public void setRfid(
        SetRfidResponseCallback callback, int userId, int userStatus, int userType, String id) {
      setRfid(chipClusterPtr, callback, userId, userStatus, userType, id);
    }

    public void setUserType(SetUserTypeResponseCallback callback, int userId, int userType) {
      setUserType(chipClusterPtr, callback, userId, userType);
    }

    public void setWeekdaySchedule(
        SetWeekdayScheduleResponseCallback callback,
        int scheduleId,
        int userId,
        int daysMask,
        int startHour,
        int startMinute,
        int endHour,
        int endMinute) {
      setWeekdaySchedule(
          chipClusterPtr,
          callback,
          scheduleId,
          userId,
          daysMask,
          startHour,
          startMinute,
          endHour,
          endMinute);
    }

    public void setYeardaySchedule(
        SetYeardayScheduleResponseCallback callback,
        int scheduleId,
        int userId,
        long localStartTime,
        long localEndTime) {
      setYeardaySchedule(
          chipClusterPtr, callback, scheduleId, userId, localStartTime, localEndTime);
    }

    public void unlockDoor(UnlockDoorResponseCallback callback, String pin) {
      unlockDoor(chipClusterPtr, callback, pin);
    }

    public void unlockWithTimeout(
        UnlockWithTimeoutResponseCallback callback, int timeoutInSeconds, String pin) {
      unlockWithTimeout(chipClusterPtr, callback, timeoutInSeconds, pin);
    }

    private native void clearAllPins(long chipClusterPtr, ClearAllPinsResponseCallback callback);

    private native void clearAllRfids(long chipClusterPtr, ClearAllRfidsResponseCallback callback);

    private native void clearHolidaySchedule(
        long chipClusterPtr, ClearHolidayScheduleResponseCallback callback, int scheduleId);

    private native void clearPin(
        long chipClusterPtr, ClearPinResponseCallback callback, int userId);

    private native void clearRfid(
        long chipClusterPtr, ClearRfidResponseCallback callback, int userId);

    private native void clearWeekdaySchedule(
        long chipClusterPtr,
        ClearWeekdayScheduleResponseCallback callback,
        int scheduleId,
        int userId);

    private native void clearYeardaySchedule(
        long chipClusterPtr,
        ClearYeardayScheduleResponseCallback callback,
        int scheduleId,
        int userId);

    private native void getHolidaySchedule(
        long chipClusterPtr, GetHolidayScheduleResponseCallback callback, int scheduleId);

    private native void getLogRecord(
        long chipClusterPtr, GetLogRecordResponseCallback callback, int logIndex);

    private native void getPin(long chipClusterPtr, GetPinResponseCallback callback, int userId);

    private native void getRfid(long chipClusterPtr, GetRfidResponseCallback callback, int userId);

    private native void getUserType(
        long chipClusterPtr, GetUserTypeResponseCallback callback, int userId);

    private native void getWeekdaySchedule(
        long chipClusterPtr,
        GetWeekdayScheduleResponseCallback callback,
        int scheduleId,
        int userId);

    private native void getYeardaySchedule(
        long chipClusterPtr,
        GetYeardayScheduleResponseCallback callback,
        int scheduleId,
        int userId);

    private native void lockDoor(
        long chipClusterPtr, LockDoorResponseCallback callback, String pin);

    private native void setHolidaySchedule(
        long chipClusterPtr,
        SetHolidayScheduleResponseCallback callback,
        int scheduleId,
        long localStartTime,
        long localEndTime,
        int operatingModeDuringHoliday);

    private native void setPin(
        long chipClusterPtr,
        SetPinResponseCallback callback,
        int userId,
        int userStatus,
        int userType,
        String pin);

    private native void setRfid(
        long chipClusterPtr,
        SetRfidResponseCallback callback,
        int userId,
        int userStatus,
        int userType,
        String id);

    private native void setUserType(
        long chipClusterPtr, SetUserTypeResponseCallback callback, int userId, int userType);

    private native void setWeekdaySchedule(
        long chipClusterPtr,
        SetWeekdayScheduleResponseCallback callback,
        int scheduleId,
        int userId,
        int daysMask,
        int startHour,
        int startMinute,
        int endHour,
        int endMinute);

    private native void setYeardaySchedule(
        long chipClusterPtr,
        SetYeardayScheduleResponseCallback callback,
        int scheduleId,
        int userId,
        long localStartTime,
        long localEndTime);

    private native void unlockDoor(
        long chipClusterPtr, UnlockDoorResponseCallback callback, String pin);

    private native void unlockWithTimeout(
        long chipClusterPtr,
        UnlockWithTimeoutResponseCallback callback,
        int timeoutInSeconds,
        String pin);

    public interface ClearAllPinsResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearAllRfidsResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearHolidayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearPinResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearRfidResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearWeekdayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface ClearYeardayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface GetHolidayScheduleResponseCallback {
      void onSuccess(
          int scheduleId,
          int status,
          long localStartTime,
          long localEndTime,
          int operatingModeDuringHoliday);

      void onError(Exception error);
    }

    public interface GetLogRecordResponseCallback {
      void onSuccess(
          int logEntryId,
          long timestamp,
          int eventType,
          int source,
          int eventIdOrAlarmCode,
          int userId,
          String pin);

      void onError(Exception error);
    }

    public interface GetPinResponseCallback {
      void onSuccess(int userId, int userStatus, int userType, String pin);

      void onError(Exception error);
    }

    public interface GetRfidResponseCallback {
      void onSuccess(int userId, int userStatus, int userType, String rfid);

      void onError(Exception error);
    }

    public interface GetUserTypeResponseCallback {
      void onSuccess(int userId, int userType);

      void onError(Exception error);
    }

    public interface GetWeekdayScheduleResponseCallback {
      void onSuccess(
          int scheduleId,
          int userId,
          int status,
          int daysMask,
          int startHour,
          int startMinute,
          int endHour,
          int endMinute);

      void onError(Exception error);
    }

    public interface GetYeardayScheduleResponseCallback {
      void onSuccess(
          int scheduleId, int userId, int status, long localStartTime, long localEndTime);

      void onError(Exception error);
    }

    public interface LockDoorResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetHolidayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetPinResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetRfidResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetUserTypeResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetWeekdayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface SetYeardayScheduleResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface UnlockDoorResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public interface UnlockWithTimeoutResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public void readLockStateAttribute(IntegerAttributeCallback callback) {
      readLockStateAttribute(chipClusterPtr, callback);
    }

    public void readLockTypeAttribute(IntegerAttributeCallback callback) {
      readLockTypeAttribute(chipClusterPtr, callback);
    }

    public void readActuatorEnabledAttribute(BooleanAttributeCallback callback) {
      readActuatorEnabledAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readLockStateAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readLockTypeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readActuatorEnabledAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ElectricalMeasurementCluster extends BaseChipCluster {
    public ElectricalMeasurementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMeasurementTypeAttribute(LongAttributeCallback callback) {
      readMeasurementTypeAttribute(chipClusterPtr, callback);
    }

    public void readTotalActivePowerAttribute(LongAttributeCallback callback) {
      readTotalActivePowerAttribute(chipClusterPtr, callback);
    }

    public void readRmsVoltageAttribute(IntegerAttributeCallback callback) {
      readRmsVoltageAttribute(chipClusterPtr, callback);
    }

    public void readRmsVoltageMinAttribute(IntegerAttributeCallback callback) {
      readRmsVoltageMinAttribute(chipClusterPtr, callback);
    }

    public void readRmsVoltageMaxAttribute(IntegerAttributeCallback callback) {
      readRmsVoltageMaxAttribute(chipClusterPtr, callback);
    }

    public void readRmsCurrentAttribute(IntegerAttributeCallback callback) {
      readRmsCurrentAttribute(chipClusterPtr, callback);
    }

    public void readRmsCurrentMinAttribute(IntegerAttributeCallback callback) {
      readRmsCurrentMinAttribute(chipClusterPtr, callback);
    }

    public void readRmsCurrentMaxAttribute(IntegerAttributeCallback callback) {
      readRmsCurrentMaxAttribute(chipClusterPtr, callback);
    }

    public void readActivePowerAttribute(IntegerAttributeCallback callback) {
      readActivePowerAttribute(chipClusterPtr, callback);
    }

    public void readActivePowerMinAttribute(IntegerAttributeCallback callback) {
      readActivePowerMinAttribute(chipClusterPtr, callback);
    }

    public void readActivePowerMaxAttribute(IntegerAttributeCallback callback) {
      readActivePowerMaxAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMeasurementTypeAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTotalActivePowerAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRmsVoltageAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRmsVoltageMinAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRmsVoltageMaxAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRmsCurrentAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRmsCurrentMinAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRmsCurrentMaxAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readActivePowerAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readActivePowerMinAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readActivePowerMaxAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class EthernetNetworkDiagnosticsCluster extends BaseChipCluster {
    public EthernetNetworkDiagnosticsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void resetCounts(DefaultClusterCallback callback) {
      resetCounts(chipClusterPtr, callback);
    }

    private native void resetCounts(long chipClusterPtr, DefaultClusterCallback callback);

    public void readPacketRxCountAttribute(LongAttributeCallback callback) {
      readPacketRxCountAttribute(chipClusterPtr, callback);
    }

    public void readPacketTxCountAttribute(LongAttributeCallback callback) {
      readPacketTxCountAttribute(chipClusterPtr, callback);
    }

    public void readTxErrCountAttribute(LongAttributeCallback callback) {
      readTxErrCountAttribute(chipClusterPtr, callback);
    }

    public void readCollisionCountAttribute(LongAttributeCallback callback) {
      readCollisionCountAttribute(chipClusterPtr, callback);
    }

    public void readOverrunCountAttribute(LongAttributeCallback callback) {
      readOverrunCountAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readPacketRxCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readPacketTxCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxErrCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readCollisionCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readOverrunCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class FixedLabelCluster extends BaseChipCluster {
    public FixedLabelCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public static class LabelListAttribute {
      public byte[] label;
      public byte[] value;

      public LabelListAttribute(byte[] label, byte[] value) {
        this.label = label;
        this.value = value;
      }
    }

    public interface LabelListAttributeCallback {
      void onSuccess(List<LabelListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readLabelListAttribute(LabelListAttributeCallback callback) {
      readLabelListAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readLabelListAttribute(
        long chipClusterPtr, LabelListAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class FlowMeasurementCluster extends BaseChipCluster {
    public FlowMeasurementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMinMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMinMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMaxMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMaxMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMinMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class GeneralCommissioningCluster extends BaseChipCluster {
    public GeneralCommissioningCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void armFailSafe(
        ArmFailSafeResponseCallback callback,
        int expiryLengthSeconds,
        long breadcrumb,
        long timeoutMs) {
      armFailSafe(chipClusterPtr, callback, expiryLengthSeconds, breadcrumb, timeoutMs);
    }

    public void commissioningComplete(CommissioningCompleteResponseCallback callback) {
      commissioningComplete(chipClusterPtr, callback);
    }

    public void setRegulatoryConfig(
        SetRegulatoryConfigResponseCallback callback,
        int location,
        String countryCode,
        long breadcrumb,
        long timeoutMs) {
      setRegulatoryConfig(chipClusterPtr, callback, location, countryCode, breadcrumb, timeoutMs);
    }

    private native void armFailSafe(
        long chipClusterPtr,
        ArmFailSafeResponseCallback callback,
        int expiryLengthSeconds,
        long breadcrumb,
        long timeoutMs);

    private native void commissioningComplete(
        long chipClusterPtr, CommissioningCompleteResponseCallback callback);

    private native void setRegulatoryConfig(
        long chipClusterPtr,
        SetRegulatoryConfigResponseCallback callback,
        int location,
        String countryCode,
        long breadcrumb,
        long timeoutMs);

    public interface ArmFailSafeResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface CommissioningCompleteResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface SetRegulatoryConfigResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public void readFabricIdAttribute(OctetStringAttributeCallback callback) {
      readFabricIdAttribute(chipClusterPtr, callback);
    }

    public void readBreadcrumbAttribute(LongAttributeCallback callback) {
      readBreadcrumbAttribute(chipClusterPtr, callback);
    }

    public void writeBreadcrumbAttribute(DefaultClusterCallback callback, long value) {
      writeBreadcrumbAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readFabricIdAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readBreadcrumbAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void writeBreadcrumbAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class GeneralDiagnosticsCluster extends BaseChipCluster {
    public GeneralDiagnosticsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public static class NetworkInterfacesAttribute {
      public byte[] name;
      public boolean fabricConnected;
      public boolean offPremiseServicesReachableIPv4;
      public boolean offPremiseServicesReachableIPv6;
      public byte[] hardwareAddress;
      public int type;

      public NetworkInterfacesAttribute(
          byte[] name,
          boolean fabricConnected,
          boolean offPremiseServicesReachableIPv4,
          boolean offPremiseServicesReachableIPv6,
          byte[] hardwareAddress,
          int type) {
        this.name = name;
        this.fabricConnected = fabricConnected;
        this.offPremiseServicesReachableIPv4 = offPremiseServicesReachableIPv4;
        this.offPremiseServicesReachableIPv6 = offPremiseServicesReachableIPv6;
        this.hardwareAddress = hardwareAddress;
        this.type = type;
      }
    }

    public interface NetworkInterfacesAttributeCallback {
      void onSuccess(List<NetworkInterfacesAttribute> valueList);

      void onError(Exception ex);
    }

    public void readNetworkInterfacesAttribute(NetworkInterfacesAttributeCallback callback) {
      readNetworkInterfacesAttribute(chipClusterPtr, callback);
    }

    public void readRebootCountAttribute(IntegerAttributeCallback callback) {
      readRebootCountAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readNetworkInterfacesAttribute(
        long chipClusterPtr, NetworkInterfacesAttributeCallback callback);

    private native void readRebootCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class GroupKeyManagementCluster extends BaseChipCluster {
    public GroupKeyManagementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public static class GroupsAttribute {
      public int vendorId;
      public int vendorGroupId;
      public int groupKeySetIndex;

      public GroupsAttribute(int vendorId, int vendorGroupId, int groupKeySetIndex) {
        this.vendorId = vendorId;
        this.vendorGroupId = vendorGroupId;
        this.groupKeySetIndex = groupKeySetIndex;
      }
    }

    public interface GroupsAttributeCallback {
      void onSuccess(List<GroupsAttribute> valueList);

      void onError(Exception ex);
    }

    public static class GroupKeysAttribute {
      public int vendorId;
      public int groupKeyIndex;
      public byte[] groupKeyRoot;
      public long groupKeyEpochStartTime;
      public int groupKeySecurityPolicy;

      public GroupKeysAttribute(
          int vendorId,
          int groupKeyIndex,
          byte[] groupKeyRoot,
          long groupKeyEpochStartTime,
          int groupKeySecurityPolicy) {
        this.vendorId = vendorId;
        this.groupKeyIndex = groupKeyIndex;
        this.groupKeyRoot = groupKeyRoot;
        this.groupKeyEpochStartTime = groupKeyEpochStartTime;
        this.groupKeySecurityPolicy = groupKeySecurityPolicy;
      }
    }

    public interface GroupKeysAttributeCallback {
      void onSuccess(List<GroupKeysAttribute> valueList);

      void onError(Exception ex);
    }

    public void readGroupsAttribute(GroupsAttributeCallback callback) {
      readGroupsAttribute(chipClusterPtr, callback);
    }

    public void readGroupKeysAttribute(GroupKeysAttributeCallback callback) {
      readGroupKeysAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readGroupsAttribute(long chipClusterPtr, GroupsAttributeCallback callback);

    private native void readGroupKeysAttribute(
        long chipClusterPtr, GroupKeysAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class GroupsCluster extends BaseChipCluster {
    public GroupsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void addGroup(AddGroupResponseCallback callback, int groupId, String groupName) {
      addGroup(chipClusterPtr, callback, groupId, groupName);
    }

    public void addGroupIfIdentifying(
        DefaultClusterCallback callback, int groupId, String groupName) {
      addGroupIfIdentifying(chipClusterPtr, callback, groupId, groupName);
    }

    public void getGroupMembership(
        GetGroupMembershipResponseCallback callback, int groupCount, int groupList) {
      getGroupMembership(chipClusterPtr, callback, groupCount, groupList);
    }

    public void removeAllGroups(DefaultClusterCallback callback) {
      removeAllGroups(chipClusterPtr, callback);
    }

    public void removeGroup(RemoveGroupResponseCallback callback, int groupId) {
      removeGroup(chipClusterPtr, callback, groupId);
    }

    public void viewGroup(ViewGroupResponseCallback callback, int groupId) {
      viewGroup(chipClusterPtr, callback, groupId);
    }

    private native void addGroup(
        long chipClusterPtr, AddGroupResponseCallback callback, int groupId, String groupName);

    private native void addGroupIfIdentifying(
        long chipClusterPtr, DefaultClusterCallback callback, int groupId, String groupName);

    private native void getGroupMembership(
        long chipClusterPtr,
        GetGroupMembershipResponseCallback callback,
        int groupCount,
        int groupList);

    private native void removeAllGroups(long chipClusterPtr, DefaultClusterCallback callback);

    private native void removeGroup(
        long chipClusterPtr, RemoveGroupResponseCallback callback, int groupId);

    private native void viewGroup(
        long chipClusterPtr, ViewGroupResponseCallback callback, int groupId);

    public interface AddGroupResponseCallback {
      void onSuccess(int status, int groupId);

      void onError(Exception error);
    }

    public interface GetGroupMembershipResponseCallback {
      void onSuccess(int capacity, int groupCount
          // groupList: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          );

      void onError(Exception error);
    }

    public interface RemoveGroupResponseCallback {
      void onSuccess(int status, int groupId);

      void onError(Exception error);
    }

    public interface ViewGroupResponseCallback {
      void onSuccess(int status, int groupId, String groupName);

      void onError(Exception error);
    }

    public void readNameSupportAttribute(IntegerAttributeCallback callback) {
      readNameSupportAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readNameSupportAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class IdentifyCluster extends BaseChipCluster {
    public IdentifyCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void identify(DefaultClusterCallback callback, int identifyTime) {
      identify(chipClusterPtr, callback, identifyTime);
    }

    public void identifyQuery(IdentifyQueryResponseCallback callback) {
      identifyQuery(chipClusterPtr, callback);
    }

    private native void identify(
        long chipClusterPtr, DefaultClusterCallback callback, int identifyTime);

    private native void identifyQuery(long chipClusterPtr, IdentifyQueryResponseCallback callback);

    public interface IdentifyQueryResponseCallback {
      void onSuccess(int timeout);

      void onError(Exception error);
    }

    public void readIdentifyTimeAttribute(IntegerAttributeCallback callback) {
      readIdentifyTimeAttribute(chipClusterPtr, callback);
    }

    public void writeIdentifyTimeAttribute(DefaultClusterCallback callback, int value) {
      writeIdentifyTimeAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readIdentifyTimeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeIdentifyTimeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class KeypadInputCluster extends BaseChipCluster {
    public KeypadInputCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void sendKey(SendKeyResponseCallback callback, int keyCode) {
      sendKey(chipClusterPtr, callback, keyCode);
    }

    private native void sendKey(long chipClusterPtr, SendKeyResponseCallback callback, int keyCode);

    public interface SendKeyResponseCallback {
      void onSuccess(int status);

      void onError(Exception error);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class LevelControlCluster extends BaseChipCluster {
    public LevelControlCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void move(
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionMask,
        int optionOverride) {
      move(chipClusterPtr, callback, moveMode, rate, optionMask, optionOverride);
    }

    public void moveToLevel(
        DefaultClusterCallback callback,
        int level,
        int transitionTime,
        int optionMask,
        int optionOverride) {
      moveToLevel(chipClusterPtr, callback, level, transitionTime, optionMask, optionOverride);
    }

    public void moveToLevelWithOnOff(
        DefaultClusterCallback callback, int level, int transitionTime) {
      moveToLevelWithOnOff(chipClusterPtr, callback, level, transitionTime);
    }

    public void moveWithOnOff(DefaultClusterCallback callback, int moveMode, int rate) {
      moveWithOnOff(chipClusterPtr, callback, moveMode, rate);
    }

    public void step(
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionMask,
        int optionOverride) {
      step(
          chipClusterPtr, callback, stepMode, stepSize, transitionTime, optionMask, optionOverride);
    }

    public void stepWithOnOff(
        DefaultClusterCallback callback, int stepMode, int stepSize, int transitionTime) {
      stepWithOnOff(chipClusterPtr, callback, stepMode, stepSize, transitionTime);
    }

    public void stop(DefaultClusterCallback callback, int optionMask, int optionOverride) {
      stop(chipClusterPtr, callback, optionMask, optionOverride);
    }

    public void stopWithOnOff(DefaultClusterCallback callback) {
      stopWithOnOff(chipClusterPtr, callback);
    }

    private native void move(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int moveMode,
        int rate,
        int optionMask,
        int optionOverride);

    private native void moveToLevel(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int level,
        int transitionTime,
        int optionMask,
        int optionOverride);

    private native void moveToLevelWithOnOff(
        long chipClusterPtr, DefaultClusterCallback callback, int level, int transitionTime);

    private native void moveWithOnOff(
        long chipClusterPtr, DefaultClusterCallback callback, int moveMode, int rate);

    private native void step(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime,
        int optionMask,
        int optionOverride);

    private native void stepWithOnOff(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int stepMode,
        int stepSize,
        int transitionTime);

    private native void stop(
        long chipClusterPtr, DefaultClusterCallback callback, int optionMask, int optionOverride);

    private native void stopWithOnOff(long chipClusterPtr, DefaultClusterCallback callback);

    public void readCurrentLevelAttribute(IntegerAttributeCallback callback) {
      readCurrentLevelAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readCurrentLevelAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class LowPowerCluster extends BaseChipCluster {
    public LowPowerCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void sleep(DefaultClusterCallback callback) {
      sleep(chipClusterPtr, callback);
    }

    private native void sleep(long chipClusterPtr, DefaultClusterCallback callback);

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class MediaInputCluster extends BaseChipCluster {
    public MediaInputCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void hideInputStatus(DefaultClusterCallback callback) {
      hideInputStatus(chipClusterPtr, callback);
    }

    public void renameInput(DefaultClusterCallback callback, int index, String name) {
      renameInput(chipClusterPtr, callback, index, name);
    }

    public void selectInput(DefaultClusterCallback callback, int index) {
      selectInput(chipClusterPtr, callback, index);
    }

    public void showInputStatus(DefaultClusterCallback callback) {
      showInputStatus(chipClusterPtr, callback);
    }

    private native void hideInputStatus(long chipClusterPtr, DefaultClusterCallback callback);

    private native void renameInput(
        long chipClusterPtr, DefaultClusterCallback callback, int index, String name);

    private native void selectInput(
        long chipClusterPtr, DefaultClusterCallback callback, int index);

    private native void showInputStatus(long chipClusterPtr, DefaultClusterCallback callback);

    public static class MediaInputListAttribute {
      public int index;
      public int inputType;
      public byte[] name;
      public byte[] description;

      public MediaInputListAttribute(int index, int inputType, byte[] name, byte[] description) {
        this.index = index;
        this.inputType = inputType;
        this.name = name;
        this.description = description;
      }
    }

    public interface MediaInputListAttributeCallback {
      void onSuccess(List<MediaInputListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readMediaInputListAttribute(MediaInputListAttributeCallback callback) {
      readMediaInputListAttribute(chipClusterPtr, callback);
    }

    public void readCurrentMediaInputAttribute(IntegerAttributeCallback callback) {
      readCurrentMediaInputAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMediaInputListAttribute(
        long chipClusterPtr, MediaInputListAttributeCallback callback);

    private native void readCurrentMediaInputAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class MediaPlaybackCluster extends BaseChipCluster {
    public MediaPlaybackCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void mediaFastForward(MediaFastForwardResponseCallback callback) {
      mediaFastForward(chipClusterPtr, callback);
    }

    public void mediaNext(MediaNextResponseCallback callback) {
      mediaNext(chipClusterPtr, callback);
    }

    public void mediaPause(MediaPauseResponseCallback callback) {
      mediaPause(chipClusterPtr, callback);
    }

    public void mediaPlay(MediaPlayResponseCallback callback) {
      mediaPlay(chipClusterPtr, callback);
    }

    public void mediaPrevious(MediaPreviousResponseCallback callback) {
      mediaPrevious(chipClusterPtr, callback);
    }

    public void mediaRewind(MediaRewindResponseCallback callback) {
      mediaRewind(chipClusterPtr, callback);
    }

    public void mediaSeek(MediaSeekResponseCallback callback, long position) {
      mediaSeek(chipClusterPtr, callback, position);
    }

    public void mediaSkipBackward(
        MediaSkipBackwardResponseCallback callback, long deltaPositionMilliseconds) {
      mediaSkipBackward(chipClusterPtr, callback, deltaPositionMilliseconds);
    }

    public void mediaSkipForward(
        MediaSkipForwardResponseCallback callback, long deltaPositionMilliseconds) {
      mediaSkipForward(chipClusterPtr, callback, deltaPositionMilliseconds);
    }

    public void mediaStartOver(MediaStartOverResponseCallback callback) {
      mediaStartOver(chipClusterPtr, callback);
    }

    public void mediaStop(MediaStopResponseCallback callback) {
      mediaStop(chipClusterPtr, callback);
    }

    private native void mediaFastForward(
        long chipClusterPtr, MediaFastForwardResponseCallback callback);

    private native void mediaNext(long chipClusterPtr, MediaNextResponseCallback callback);

    private native void mediaPause(long chipClusterPtr, MediaPauseResponseCallback callback);

    private native void mediaPlay(long chipClusterPtr, MediaPlayResponseCallback callback);

    private native void mediaPrevious(long chipClusterPtr, MediaPreviousResponseCallback callback);

    private native void mediaRewind(long chipClusterPtr, MediaRewindResponseCallback callback);

    private native void mediaSeek(
        long chipClusterPtr, MediaSeekResponseCallback callback, long position);

    private native void mediaSkipBackward(
        long chipClusterPtr,
        MediaSkipBackwardResponseCallback callback,
        long deltaPositionMilliseconds);

    private native void mediaSkipForward(
        long chipClusterPtr,
        MediaSkipForwardResponseCallback callback,
        long deltaPositionMilliseconds);

    private native void mediaStartOver(
        long chipClusterPtr, MediaStartOverResponseCallback callback);

    private native void mediaStop(long chipClusterPtr, MediaStopResponseCallback callback);

    public interface MediaFastForwardResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaNextResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaPauseResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaPlayResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaPreviousResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaRewindResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaSeekResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaSkipBackwardResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaSkipForwardResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaStartOverResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public interface MediaStopResponseCallback {
      void onSuccess(int mediaPlaybackStatus);

      void onError(Exception error);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class NetworkCommissioningCluster extends BaseChipCluster {
    public NetworkCommissioningCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void addThreadNetwork(
        AddThreadNetworkResponseCallback callback,
        byte[] operationalDataset,
        long breadcrumb,
        long timeoutMs) {
      addThreadNetwork(chipClusterPtr, callback, operationalDataset, breadcrumb, timeoutMs);
    }

    public void addWiFiNetwork(
        AddWiFiNetworkResponseCallback callback,
        byte[] ssid,
        byte[] credentials,
        long breadcrumb,
        long timeoutMs) {
      addWiFiNetwork(chipClusterPtr, callback, ssid, credentials, breadcrumb, timeoutMs);
    }

    public void disableNetwork(
        DisableNetworkResponseCallback callback,
        byte[] networkID,
        long breadcrumb,
        long timeoutMs) {
      disableNetwork(chipClusterPtr, callback, networkID, breadcrumb, timeoutMs);
    }

    public void enableNetwork(
        EnableNetworkResponseCallback callback, byte[] networkID, long breadcrumb, long timeoutMs) {
      enableNetwork(chipClusterPtr, callback, networkID, breadcrumb, timeoutMs);
    }

    public void getLastNetworkCommissioningResult(DefaultClusterCallback callback, long timeoutMs) {
      getLastNetworkCommissioningResult(chipClusterPtr, callback, timeoutMs);
    }

    public void removeNetwork(
        RemoveNetworkResponseCallback callback, byte[] networkID, long breadcrumb, long timeoutMs) {
      removeNetwork(chipClusterPtr, callback, networkID, breadcrumb, timeoutMs);
    }

    public void scanNetworks(
        ScanNetworksResponseCallback callback, byte[] ssid, long breadcrumb, long timeoutMs) {
      scanNetworks(chipClusterPtr, callback, ssid, breadcrumb, timeoutMs);
    }

    public void updateThreadNetwork(
        UpdateThreadNetworkResponseCallback callback,
        byte[] operationalDataset,
        long breadcrumb,
        long timeoutMs) {
      updateThreadNetwork(chipClusterPtr, callback, operationalDataset, breadcrumb, timeoutMs);
    }

    public void updateWiFiNetwork(
        UpdateWiFiNetworkResponseCallback callback,
        byte[] ssid,
        byte[] credentials,
        long breadcrumb,
        long timeoutMs) {
      updateWiFiNetwork(chipClusterPtr, callback, ssid, credentials, breadcrumb, timeoutMs);
    }

    private native void addThreadNetwork(
        long chipClusterPtr,
        AddThreadNetworkResponseCallback callback,
        byte[] operationalDataset,
        long breadcrumb,
        long timeoutMs);

    private native void addWiFiNetwork(
        long chipClusterPtr,
        AddWiFiNetworkResponseCallback callback,
        byte[] ssid,
        byte[] credentials,
        long breadcrumb,
        long timeoutMs);

    private native void disableNetwork(
        long chipClusterPtr,
        DisableNetworkResponseCallback callback,
        byte[] networkID,
        long breadcrumb,
        long timeoutMs);

    private native void enableNetwork(
        long chipClusterPtr,
        EnableNetworkResponseCallback callback,
        byte[] networkID,
        long breadcrumb,
        long timeoutMs);

    private native void getLastNetworkCommissioningResult(
        long chipClusterPtr, DefaultClusterCallback callback, long timeoutMs);

    private native void removeNetwork(
        long chipClusterPtr,
        RemoveNetworkResponseCallback callback,
        byte[] networkID,
        long breadcrumb,
        long timeoutMs);

    private native void scanNetworks(
        long chipClusterPtr,
        ScanNetworksResponseCallback callback,
        byte[] ssid,
        long breadcrumb,
        long timeoutMs);

    private native void updateThreadNetwork(
        long chipClusterPtr,
        UpdateThreadNetworkResponseCallback callback,
        byte[] operationalDataset,
        long breadcrumb,
        long timeoutMs);

    private native void updateWiFiNetwork(
        long chipClusterPtr,
        UpdateWiFiNetworkResponseCallback callback,
        byte[] ssid,
        byte[] credentials,
        long breadcrumb,
        long timeoutMs);

    public interface AddThreadNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface AddWiFiNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface DisableNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface EnableNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface RemoveNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface ScanNetworksResponseCallback {
      void onSuccess(int errorCode, String debugText
          // wifiScanResults: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          // threadScanResults: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          );

      void onError(Exception error);
    }

    public interface UpdateThreadNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public interface UpdateWiFiNetworkResponseCallback {
      void onSuccess(int errorCode, String debugText);

      void onError(Exception error);
    }

    public void readFeatureMapAttribute(LongAttributeCallback callback) {
      readFeatureMapAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readFeatureMapAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class OtaSoftwareUpdateProviderCluster extends BaseChipCluster {
    public OtaSoftwareUpdateProviderCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void applyUpdateRequest(
        ApplyUpdateRequestResponseCallback callback, byte[] updateToken, long newVersion) {
      applyUpdateRequest(chipClusterPtr, callback, updateToken, newVersion);
    }

    public void notifyUpdateApplied(
        DefaultClusterCallback callback, byte[] updateToken, long currentVersion) {
      notifyUpdateApplied(chipClusterPtr, callback, updateToken, currentVersion);
    }

    public void queryImage(
        QueryImageResponseCallback callback,
        int vendorId,
        int productId,
        int imageType,
        int hardwareVersion,
        long currentVersion,
        int protocolsSupported,
        String location,
        boolean requestorCanConsent,
        byte[] metadataForProvider) {
      queryImage(
          chipClusterPtr,
          callback,
          vendorId,
          productId,
          imageType,
          hardwareVersion,
          currentVersion,
          protocolsSupported,
          location,
          requestorCanConsent,
          metadataForProvider);
    }

    private native void applyUpdateRequest(
        long chipClusterPtr,
        ApplyUpdateRequestResponseCallback callback,
        byte[] updateToken,
        long newVersion);

    private native void notifyUpdateApplied(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        byte[] updateToken,
        long currentVersion);

    private native void queryImage(
        long chipClusterPtr,
        QueryImageResponseCallback callback,
        int vendorId,
        int productId,
        int imageType,
        int hardwareVersion,
        long currentVersion,
        int protocolsSupported,
        String location,
        boolean requestorCanConsent,
        byte[] metadataForProvider);

    public interface ApplyUpdateRequestResponseCallback {
      void onSuccess(int action, long delayedActionTime);

      void onError(Exception error);
    }

    public interface QueryImageResponseCallback {
      void onSuccess(
          int status,
          long delayedActionTime,
          String imageURI,
          long softwareVersion,
          byte[] updateToken,
          boolean userConsentNeeded,
          byte[] metadataForRequestor);

      void onError(Exception error);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class OccupancySensingCluster extends BaseChipCluster {
    public OccupancySensingCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readOccupancyAttribute(IntegerAttributeCallback callback) {
      readOccupancyAttribute(chipClusterPtr, callback);
    }

    public void readOccupancySensorTypeAttribute(IntegerAttributeCallback callback) {
      readOccupancySensorTypeAttribute(chipClusterPtr, callback);
    }

    public void readOccupancySensorTypeBitmapAttribute(IntegerAttributeCallback callback) {
      readOccupancySensorTypeBitmapAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readOccupancyAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOccupancySensorTypeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOccupancySensorTypeBitmapAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class OnOffCluster extends BaseChipCluster {
    public OnOffCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void off(DefaultClusterCallback callback) {
      off(chipClusterPtr, callback);
    }

    public void offWithEffect(DefaultClusterCallback callback, int effectId, int effectVariant) {
      offWithEffect(chipClusterPtr, callback, effectId, effectVariant);
    }

    public void on(DefaultClusterCallback callback) {
      on(chipClusterPtr, callback);
    }

    public void onWithRecallGlobalScene(DefaultClusterCallback callback) {
      onWithRecallGlobalScene(chipClusterPtr, callback);
    }

    public void onWithTimedOff(
        DefaultClusterCallback callback, int onOffControl, int onTime, int offWaitTime) {
      onWithTimedOff(chipClusterPtr, callback, onOffControl, onTime, offWaitTime);
    }

    public void toggle(DefaultClusterCallback callback) {
      toggle(chipClusterPtr, callback);
    }

    private native void off(long chipClusterPtr, DefaultClusterCallback callback);

    private native void offWithEffect(
        long chipClusterPtr, DefaultClusterCallback callback, int effectId, int effectVariant);

    private native void on(long chipClusterPtr, DefaultClusterCallback callback);

    private native void onWithRecallGlobalScene(
        long chipClusterPtr, DefaultClusterCallback callback);

    private native void onWithTimedOff(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int onOffControl,
        int onTime,
        int offWaitTime);

    private native void toggle(long chipClusterPtr, DefaultClusterCallback callback);

    public void readOnOffAttribute(BooleanAttributeCallback callback) {
      readOnOffAttribute(chipClusterPtr, callback);
    }

    public void readGlobalSceneControlAttribute(BooleanAttributeCallback callback) {
      readGlobalSceneControlAttribute(chipClusterPtr, callback);
    }

    public void readOnTimeAttribute(IntegerAttributeCallback callback) {
      readOnTimeAttribute(chipClusterPtr, callback);
    }

    public void writeOnTimeAttribute(DefaultClusterCallback callback, int value) {
      writeOnTimeAttribute(chipClusterPtr, callback, value);
    }

    public void readOffWaitTimeAttribute(IntegerAttributeCallback callback) {
      readOffWaitTimeAttribute(chipClusterPtr, callback);
    }

    public void writeOffWaitTimeAttribute(DefaultClusterCallback callback, int value) {
      writeOffWaitTimeAttribute(chipClusterPtr, callback, value);
    }

    public void readStartUpOnOffAttribute(IntegerAttributeCallback callback) {
      readStartUpOnOffAttribute(chipClusterPtr, callback);
    }

    public void writeStartUpOnOffAttribute(DefaultClusterCallback callback, int value) {
      writeStartUpOnOffAttribute(chipClusterPtr, callback, value);
    }

    public void readFeatureMapAttribute(LongAttributeCallback callback) {
      readFeatureMapAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readOnOffAttribute(long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readGlobalSceneControlAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readOnTimeAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeOnTimeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readOffWaitTimeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeOffWaitTimeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readStartUpOnOffAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeStartUpOnOffAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readFeatureMapAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class OperationalCredentialsCluster extends BaseChipCluster {
    public OperationalCredentialsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void addNOC(
        NOCResponseCallback callback,
        byte[] nOCArray,
        byte[] iPKValue,
        long caseAdminNode,
        int adminVendorId) {
      addNOC(chipClusterPtr, callback, nOCArray, iPKValue, caseAdminNode, adminVendorId);
    }

    public void addTrustedRootCertificate(DefaultClusterCallback callback, byte[] rootCertificate) {
      addTrustedRootCertificate(chipClusterPtr, callback, rootCertificate);
    }

    public void opCSRRequest(OpCSRResponseCallback callback, byte[] cSRNonce) {
      opCSRRequest(chipClusterPtr, callback, cSRNonce);
    }

    public void removeAllFabrics(DefaultClusterCallback callback) {
      removeAllFabrics(chipClusterPtr, callback);
    }

    public void removeFabric(
        NOCResponseCallback callback, long fabricId, long nodeId, int vendorId) {
      removeFabric(chipClusterPtr, callback, fabricId, nodeId, vendorId);
    }

    public void removeTrustedRootCertificate(
        DefaultClusterCallback callback, byte[] trustedRootIdentifier) {
      removeTrustedRootCertificate(chipClusterPtr, callback, trustedRootIdentifier);
    }

    public void setFabric(SetFabricResponseCallback callback, int vendorId) {
      setFabric(chipClusterPtr, callback, vendorId);
    }

    public void updateFabricLabel(NOCResponseCallback callback, String label) {
      updateFabricLabel(chipClusterPtr, callback, label);
    }

    private native void addNOC(
        long chipClusterPtr,
        NOCResponseCallback callback,
        byte[] nOCArray,
        byte[] iPKValue,
        long caseAdminNode,
        int adminVendorId);

    private native void addTrustedRootCertificate(
        long chipClusterPtr, DefaultClusterCallback callback, byte[] rootCertificate);

    private native void opCSRRequest(
        long chipClusterPtr, OpCSRResponseCallback callback, byte[] cSRNonce);

    private native void removeAllFabrics(long chipClusterPtr, DefaultClusterCallback callback);

    private native void removeFabric(
        long chipClusterPtr,
        NOCResponseCallback callback,
        long fabricId,
        long nodeId,
        int vendorId);

    private native void removeTrustedRootCertificate(
        long chipClusterPtr, DefaultClusterCallback callback, byte[] trustedRootIdentifier);

    private native void setFabric(
        long chipClusterPtr, SetFabricResponseCallback callback, int vendorId);

    private native void updateFabricLabel(
        long chipClusterPtr, NOCResponseCallback callback, String label);

    public interface NOCResponseCallback {
      void onSuccess(int StatusCode, int FabricIndex, byte[] DebugText);

      void onError(Exception error);
    }

    public interface OpCSRResponseCallback {
      void onSuccess(byte[] NOCSRElements, byte[] AttestationSignature);

      void onError(Exception error);
    }

    public interface SetFabricResponseCallback {
      void onSuccess(long FabricId);

      void onError(Exception error);
    }

    public static class FabricsListAttribute {
      public long fabricId;
      public int vendorId;
      public long nodeId;
      public byte[] label;

      public FabricsListAttribute(long fabricId, int vendorId, long nodeId, byte[] label) {
        this.fabricId = fabricId;
        this.vendorId = vendorId;
        this.nodeId = nodeId;
        this.label = label;
      }
    }

    public interface FabricsListAttributeCallback {
      void onSuccess(List<FabricsListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readFabricsListAttribute(FabricsListAttributeCallback callback) {
      readFabricsListAttribute(chipClusterPtr, callback);
    }

    public void readSupportedFabricsAttribute(IntegerAttributeCallback callback) {
      readSupportedFabricsAttribute(chipClusterPtr, callback);
    }

    public void readCommissionedFabricsAttribute(IntegerAttributeCallback callback) {
      readCommissionedFabricsAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readFabricsListAttribute(
        long chipClusterPtr, FabricsListAttributeCallback callback);

    private native void readSupportedFabricsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCommissionedFabricsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class PressureMeasurementCluster extends BaseChipCluster {
    public PressureMeasurementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMinMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMinMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMaxMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMaxMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMinMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class PumpConfigurationAndControlCluster extends BaseChipCluster {
    public PumpConfigurationAndControlCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMaxPressureAttribute(IntegerAttributeCallback callback) {
      readMaxPressureAttribute(chipClusterPtr, callback);
    }

    public void readMaxSpeedAttribute(IntegerAttributeCallback callback) {
      readMaxSpeedAttribute(chipClusterPtr, callback);
    }

    public void readMaxFlowAttribute(IntegerAttributeCallback callback) {
      readMaxFlowAttribute(chipClusterPtr, callback);
    }

    public void readEffectiveOperationModeAttribute(IntegerAttributeCallback callback) {
      readEffectiveOperationModeAttribute(chipClusterPtr, callback);
    }

    public void readEffectiveControlModeAttribute(IntegerAttributeCallback callback) {
      readEffectiveControlModeAttribute(chipClusterPtr, callback);
    }

    public void readCapacityAttribute(IntegerAttributeCallback callback) {
      readCapacityAttribute(chipClusterPtr, callback);
    }

    public void readOperationModeAttribute(IntegerAttributeCallback callback) {
      readOperationModeAttribute(chipClusterPtr, callback);
    }

    public void writeOperationModeAttribute(DefaultClusterCallback callback, int value) {
      writeOperationModeAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMaxPressureAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxSpeedAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxFlowAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readEffectiveOperationModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readEffectiveControlModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCapacityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOperationModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeOperationModeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class RelativeHumidityMeasurementCluster extends BaseChipCluster {
    public RelativeHumidityMeasurementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMinMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMinMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMaxMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMaxMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMinMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ScenesCluster extends BaseChipCluster {
    public ScenesCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void addScene(
        AddSceneResponseCallback callback,
        int groupId,
        int sceneId,
        int transitionTime,
        String sceneName,
        long clusterId,
        int length,
        int value) {
      addScene(
          chipClusterPtr,
          callback,
          groupId,
          sceneId,
          transitionTime,
          sceneName,
          clusterId,
          length,
          value);
    }

    public void getSceneMembership(GetSceneMembershipResponseCallback callback, int groupId) {
      getSceneMembership(chipClusterPtr, callback, groupId);
    }

    public void recallScene(
        DefaultClusterCallback callback, int groupId, int sceneId, int transitionTime) {
      recallScene(chipClusterPtr, callback, groupId, sceneId, transitionTime);
    }

    public void removeAllScenes(RemoveAllScenesResponseCallback callback, int groupId) {
      removeAllScenes(chipClusterPtr, callback, groupId);
    }

    public void removeScene(RemoveSceneResponseCallback callback, int groupId, int sceneId) {
      removeScene(chipClusterPtr, callback, groupId, sceneId);
    }

    public void storeScene(StoreSceneResponseCallback callback, int groupId, int sceneId) {
      storeScene(chipClusterPtr, callback, groupId, sceneId);
    }

    public void viewScene(ViewSceneResponseCallback callback, int groupId, int sceneId) {
      viewScene(chipClusterPtr, callback, groupId, sceneId);
    }

    private native void addScene(
        long chipClusterPtr,
        AddSceneResponseCallback callback,
        int groupId,
        int sceneId,
        int transitionTime,
        String sceneName,
        long clusterId,
        int length,
        int value);

    private native void getSceneMembership(
        long chipClusterPtr, GetSceneMembershipResponseCallback callback, int groupId);

    private native void recallScene(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int groupId,
        int sceneId,
        int transitionTime);

    private native void removeAllScenes(
        long chipClusterPtr, RemoveAllScenesResponseCallback callback, int groupId);

    private native void removeScene(
        long chipClusterPtr, RemoveSceneResponseCallback callback, int groupId, int sceneId);

    private native void storeScene(
        long chipClusterPtr, StoreSceneResponseCallback callback, int groupId, int sceneId);

    private native void viewScene(
        long chipClusterPtr, ViewSceneResponseCallback callback, int groupId, int sceneId);

    public interface AddSceneResponseCallback {
      void onSuccess(int status, int groupId, int sceneId);

      void onError(Exception error);
    }

    public interface GetSceneMembershipResponseCallback {
      void onSuccess(int status, int capacity, int groupId, int sceneCount
          // sceneList: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          );

      void onError(Exception error);
    }

    public interface RemoveAllScenesResponseCallback {
      void onSuccess(int status, int groupId);

      void onError(Exception error);
    }

    public interface RemoveSceneResponseCallback {
      void onSuccess(int status, int groupId, int sceneId);

      void onError(Exception error);
    }

    public interface StoreSceneResponseCallback {
      void onSuccess(int status, int groupId, int sceneId);

      void onError(Exception error);
    }

    public interface ViewSceneResponseCallback {
      void onSuccess(int status, int groupId, int sceneId, int transitionTime, String sceneName
          // extensionFieldSets: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          );

      void onError(Exception error);
    }

    public void readSceneCountAttribute(IntegerAttributeCallback callback) {
      readSceneCountAttribute(chipClusterPtr, callback);
    }

    public void readCurrentSceneAttribute(IntegerAttributeCallback callback) {
      readCurrentSceneAttribute(chipClusterPtr, callback);
    }

    public void readCurrentGroupAttribute(IntegerAttributeCallback callback) {
      readCurrentGroupAttribute(chipClusterPtr, callback);
    }

    public void readSceneValidAttribute(BooleanAttributeCallback callback) {
      readSceneValidAttribute(chipClusterPtr, callback);
    }

    public void readNameSupportAttribute(IntegerAttributeCallback callback) {
      readNameSupportAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readSceneCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentSceneAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentGroupAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readSceneValidAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void readNameSupportAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class SoftwareDiagnosticsCluster extends BaseChipCluster {
    public SoftwareDiagnosticsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void resetWatermarks(DefaultClusterCallback callback) {
      resetWatermarks(chipClusterPtr, callback);
    }

    private native void resetWatermarks(long chipClusterPtr, DefaultClusterCallback callback);

    public void readCurrentHeapHighWatermarkAttribute(LongAttributeCallback callback) {
      readCurrentHeapHighWatermarkAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readCurrentHeapHighWatermarkAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class SwitchCluster extends BaseChipCluster {
    public SwitchCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readNumberOfPositionsAttribute(IntegerAttributeCallback callback) {
      readNumberOfPositionsAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readNumberOfPositionsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class TvChannelCluster extends BaseChipCluster {
    public TvChannelCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void changeChannel(ChangeChannelResponseCallback callback, String match) {
      changeChannel(chipClusterPtr, callback, match);
    }

    public void changeChannelByNumber(
        DefaultClusterCallback callback, int majorNumber, int minorNumber) {
      changeChannelByNumber(chipClusterPtr, callback, majorNumber, minorNumber);
    }

    public void skipChannel(DefaultClusterCallback callback, int count) {
      skipChannel(chipClusterPtr, callback, count);
    }

    private native void changeChannel(
        long chipClusterPtr, ChangeChannelResponseCallback callback, String match);

    private native void changeChannelByNumber(
        long chipClusterPtr, DefaultClusterCallback callback, int majorNumber, int minorNumber);

    private native void skipChannel(
        long chipClusterPtr, DefaultClusterCallback callback, int count);

    public interface ChangeChannelResponseCallback {
      void onSuccess(
          // ChannelMatch: /* TYPE WARNING: array array defaults to */ uint8_t *
          // Conversion from this type to Java is not properly implemented yet
          int ErrorType);

      void onError(Exception error);
    }

    public static class TvChannelListAttribute {
      public int majorNumber;
      public int minorNumber;
      public byte[] name;
      public byte[] callSign;
      public byte[] affiliateCallSign;

      public TvChannelListAttribute(
          int majorNumber,
          int minorNumber,
          byte[] name,
          byte[] callSign,
          byte[] affiliateCallSign) {
        this.majorNumber = majorNumber;
        this.minorNumber = minorNumber;
        this.name = name;
        this.callSign = callSign;
        this.affiliateCallSign = affiliateCallSign;
      }
    }

    public interface TvChannelListAttributeCallback {
      void onSuccess(List<TvChannelListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readTvChannelListAttribute(TvChannelListAttributeCallback callback) {
      readTvChannelListAttribute(chipClusterPtr, callback);
    }

    public void readTvChannelLineupAttribute(OctetStringAttributeCallback callback) {
      readTvChannelLineupAttribute(chipClusterPtr, callback);
    }

    public void readCurrentTvChannelAttribute(OctetStringAttributeCallback callback) {
      readCurrentTvChannelAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readTvChannelListAttribute(
        long chipClusterPtr, TvChannelListAttributeCallback callback);

    private native void readTvChannelLineupAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readCurrentTvChannelAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class TargetNavigatorCluster extends BaseChipCluster {
    public TargetNavigatorCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void navigateTarget(NavigateTargetResponseCallback callback, int target, String data) {
      navigateTarget(chipClusterPtr, callback, target, data);
    }

    private native void navigateTarget(
        long chipClusterPtr, NavigateTargetResponseCallback callback, int target, String data);

    public interface NavigateTargetResponseCallback {
      void onSuccess(int status, String data);

      void onError(Exception error);
    }

    public static class TargetNavigatorListAttribute {
      public int identifier;
      public byte[] name;

      public TargetNavigatorListAttribute(int identifier, byte[] name) {
        this.identifier = identifier;
        this.name = name;
      }
    }

    public interface TargetNavigatorListAttributeCallback {
      void onSuccess(List<TargetNavigatorListAttribute> valueList);

      void onError(Exception ex);
    }

    public void readTargetNavigatorListAttribute(TargetNavigatorListAttributeCallback callback) {
      readTargetNavigatorListAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readTargetNavigatorListAttribute(
        long chipClusterPtr, TargetNavigatorListAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class TemperatureMeasurementCluster extends BaseChipCluster {
    public TemperatureMeasurementCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMinMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMinMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readMaxMeasuredValueAttribute(IntegerAttributeCallback callback) {
      readMaxMeasuredValueAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMinMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readMaxMeasuredValueAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class TestClusterCluster extends BaseChipCluster {
    public TestClusterCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void test(DefaultClusterCallback callback) {
      test(chipClusterPtr, callback);
    }

    public void testAddArguments(TestAddArgumentsResponseCallback callback, int arg1, int arg2) {
      testAddArguments(chipClusterPtr, callback, arg1, arg2);
    }

    public void testNotHandled(DefaultClusterCallback callback) {
      testNotHandled(chipClusterPtr, callback);
    }

    public void testSpecific(TestSpecificResponseCallback callback) {
      testSpecific(chipClusterPtr, callback);
    }

    public void testUnknownCommand(DefaultClusterCallback callback) {
      testUnknownCommand(chipClusterPtr, callback);
    }

    private native void test(long chipClusterPtr, DefaultClusterCallback callback);

    private native void testAddArguments(
        long chipClusterPtr, TestAddArgumentsResponseCallback callback, int arg1, int arg2);

    private native void testNotHandled(long chipClusterPtr, DefaultClusterCallback callback);

    private native void testSpecific(long chipClusterPtr, TestSpecificResponseCallback callback);

    private native void testUnknownCommand(long chipClusterPtr, DefaultClusterCallback callback);

    public interface TestAddArgumentsResponseCallback {
      void onSuccess(int returnValue);

      void onError(Exception error);
    }

    public interface TestSpecificResponseCallback {
      void onSuccess(int returnValue);

      void onError(Exception error);
    }

    public interface ListInt8uAttributeCallback {
      void onSuccess(List<Integer> valueList);

      void onError(Exception ex);
    }

    public interface ListOctetStringAttributeCallback {
      void onSuccess(List<byte[]> valueList);

      void onError(Exception ex);
    }

    public static class ListStructOctetStringAttribute {
      public long fabricIndex;
      public byte[] operationalCert;

      public ListStructOctetStringAttribute(long fabricIndex, byte[] operationalCert) {
        this.fabricIndex = fabricIndex;
        this.operationalCert = operationalCert;
      }
    }

    public interface ListStructOctetStringAttributeCallback {
      void onSuccess(List<ListStructOctetStringAttribute> valueList);

      void onError(Exception ex);
    }

    public void readBooleanAttribute(BooleanAttributeCallback callback) {
      readBooleanAttribute(chipClusterPtr, callback);
    }

    public void writeBooleanAttribute(DefaultClusterCallback callback, boolean value) {
      writeBooleanAttribute(chipClusterPtr, callback, value);
    }

    public void readBitmap8Attribute(IntegerAttributeCallback callback) {
      readBitmap8Attribute(chipClusterPtr, callback);
    }

    public void writeBitmap8Attribute(DefaultClusterCallback callback, int value) {
      writeBitmap8Attribute(chipClusterPtr, callback, value);
    }

    public void readBitmap16Attribute(IntegerAttributeCallback callback) {
      readBitmap16Attribute(chipClusterPtr, callback);
    }

    public void writeBitmap16Attribute(DefaultClusterCallback callback, int value) {
      writeBitmap16Attribute(chipClusterPtr, callback, value);
    }

    public void readBitmap32Attribute(LongAttributeCallback callback) {
      readBitmap32Attribute(chipClusterPtr, callback);
    }

    public void writeBitmap32Attribute(DefaultClusterCallback callback, long value) {
      writeBitmap32Attribute(chipClusterPtr, callback, value);
    }

    public void readBitmap64Attribute(LongAttributeCallback callback) {
      readBitmap64Attribute(chipClusterPtr, callback);
    }

    public void writeBitmap64Attribute(DefaultClusterCallback callback, long value) {
      writeBitmap64Attribute(chipClusterPtr, callback, value);
    }

    public void readInt8uAttribute(IntegerAttributeCallback callback) {
      readInt8uAttribute(chipClusterPtr, callback);
    }

    public void writeInt8uAttribute(DefaultClusterCallback callback, int value) {
      writeInt8uAttribute(chipClusterPtr, callback, value);
    }

    public void readInt16uAttribute(IntegerAttributeCallback callback) {
      readInt16uAttribute(chipClusterPtr, callback);
    }

    public void writeInt16uAttribute(DefaultClusterCallback callback, int value) {
      writeInt16uAttribute(chipClusterPtr, callback, value);
    }

    public void readInt32uAttribute(LongAttributeCallback callback) {
      readInt32uAttribute(chipClusterPtr, callback);
    }

    public void writeInt32uAttribute(DefaultClusterCallback callback, long value) {
      writeInt32uAttribute(chipClusterPtr, callback, value);
    }

    public void readInt64uAttribute(LongAttributeCallback callback) {
      readInt64uAttribute(chipClusterPtr, callback);
    }

    public void writeInt64uAttribute(DefaultClusterCallback callback, long value) {
      writeInt64uAttribute(chipClusterPtr, callback, value);
    }

    public void readInt8sAttribute(IntegerAttributeCallback callback) {
      readInt8sAttribute(chipClusterPtr, callback);
    }

    public void writeInt8sAttribute(DefaultClusterCallback callback, int value) {
      writeInt8sAttribute(chipClusterPtr, callback, value);
    }

    public void readInt16sAttribute(IntegerAttributeCallback callback) {
      readInt16sAttribute(chipClusterPtr, callback);
    }

    public void writeInt16sAttribute(DefaultClusterCallback callback, int value) {
      writeInt16sAttribute(chipClusterPtr, callback, value);
    }

    public void readInt32sAttribute(LongAttributeCallback callback) {
      readInt32sAttribute(chipClusterPtr, callback);
    }

    public void writeInt32sAttribute(DefaultClusterCallback callback, long value) {
      writeInt32sAttribute(chipClusterPtr, callback, value);
    }

    public void readInt64sAttribute(LongAttributeCallback callback) {
      readInt64sAttribute(chipClusterPtr, callback);
    }

    public void writeInt64sAttribute(DefaultClusterCallback callback, long value) {
      writeInt64sAttribute(chipClusterPtr, callback, value);
    }

    public void readEnum8Attribute(IntegerAttributeCallback callback) {
      readEnum8Attribute(chipClusterPtr, callback);
    }

    public void writeEnum8Attribute(DefaultClusterCallback callback, int value) {
      writeEnum8Attribute(chipClusterPtr, callback, value);
    }

    public void readEnum16Attribute(IntegerAttributeCallback callback) {
      readEnum16Attribute(chipClusterPtr, callback);
    }

    public void writeEnum16Attribute(DefaultClusterCallback callback, int value) {
      writeEnum16Attribute(chipClusterPtr, callback, value);
    }

    public void readOctetStringAttribute(OctetStringAttributeCallback callback) {
      readOctetStringAttribute(chipClusterPtr, callback);
    }

    public void writeOctetStringAttribute(DefaultClusterCallback callback, byte[] value) {
      writeOctetStringAttribute(chipClusterPtr, callback, value);
    }

    public void readListInt8uAttribute(ListInt8uAttributeCallback callback) {
      readListInt8uAttribute(chipClusterPtr, callback);
    }

    public void readListOctetStringAttribute(ListOctetStringAttributeCallback callback) {
      readListOctetStringAttribute(chipClusterPtr, callback);
    }

    public void readListStructOctetStringAttribute(
        ListStructOctetStringAttributeCallback callback) {
      readListStructOctetStringAttribute(chipClusterPtr, callback);
    }

    public void readLongOctetStringAttribute(OctetStringAttributeCallback callback) {
      readLongOctetStringAttribute(chipClusterPtr, callback);
    }

    public void writeLongOctetStringAttribute(DefaultClusterCallback callback, byte[] value) {
      writeLongOctetStringAttribute(chipClusterPtr, callback, value);
    }

    public void readCharStringAttribute(CharStringAttributeCallback callback) {
      readCharStringAttribute(chipClusterPtr, callback);
    }

    public void writeCharStringAttribute(DefaultClusterCallback callback, String value) {
      writeCharStringAttribute(chipClusterPtr, callback, value);
    }

    public void readLongCharStringAttribute(CharStringAttributeCallback callback) {
      readLongCharStringAttribute(chipClusterPtr, callback);
    }

    public void writeLongCharStringAttribute(DefaultClusterCallback callback, String value) {
      writeLongCharStringAttribute(chipClusterPtr, callback, value);
    }

    public void readUnsupportedAttribute(BooleanAttributeCallback callback) {
      readUnsupportedAttribute(chipClusterPtr, callback);
    }

    public void writeUnsupportedAttribute(DefaultClusterCallback callback, boolean value) {
      writeUnsupportedAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readBooleanAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void writeBooleanAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, boolean value);

    private native void readBitmap8Attribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeBitmap8Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readBitmap16Attribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeBitmap16Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readBitmap32Attribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeBitmap32Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readBitmap64Attribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeBitmap64Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readInt8uAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeInt8uAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readInt16uAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeInt16uAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readInt32uAttribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeInt32uAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readInt64uAttribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeInt64uAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readInt8sAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeInt8sAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readInt16sAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeInt16sAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readInt32sAttribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeInt32sAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readInt64sAttribute(long chipClusterPtr, LongAttributeCallback callback);

    private native void writeInt64sAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, long value);

    private native void readEnum8Attribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeEnum8Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readEnum16Attribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeEnum16Attribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readOctetStringAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void writeOctetStringAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, byte[] value);

    private native void readListInt8uAttribute(
        long chipClusterPtr, ListInt8uAttributeCallback callback);

    private native void readListOctetStringAttribute(
        long chipClusterPtr, ListOctetStringAttributeCallback callback);

    private native void readListStructOctetStringAttribute(
        long chipClusterPtr, ListStructOctetStringAttributeCallback callback);

    private native void readLongOctetStringAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void writeLongOctetStringAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, byte[] value);

    private native void readCharStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void writeCharStringAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, String value);

    private native void readLongCharStringAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void writeLongCharStringAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, String value);

    private native void readUnsupportedAttribute(
        long chipClusterPtr, BooleanAttributeCallback callback);

    private native void writeUnsupportedAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, boolean value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ThermostatCluster extends BaseChipCluster {
    public ThermostatCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void clearWeeklySchedule(DefaultClusterCallback callback) {
      clearWeeklySchedule(chipClusterPtr, callback);
    }

    public void getRelayStatusLog(DefaultClusterCallback callback) {
      getRelayStatusLog(chipClusterPtr, callback);
    }

    public void getWeeklySchedule(
        DefaultClusterCallback callback, int daysToReturn, int modeToReturn) {
      getWeeklySchedule(chipClusterPtr, callback, daysToReturn, modeToReturn);
    }

    public void setWeeklySchedule(
        DefaultClusterCallback callback,
        int numberOfTransitionsForSequence,
        int dayOfWeekForSequence,
        int modeForSequence,
        int payload) {
      setWeeklySchedule(
          chipClusterPtr,
          callback,
          numberOfTransitionsForSequence,
          dayOfWeekForSequence,
          modeForSequence,
          payload);
    }

    public void setpointRaiseLower(DefaultClusterCallback callback, int mode, int amount) {
      setpointRaiseLower(chipClusterPtr, callback, mode, amount);
    }

    private native void clearWeeklySchedule(long chipClusterPtr, DefaultClusterCallback callback);

    private native void getRelayStatusLog(long chipClusterPtr, DefaultClusterCallback callback);

    private native void getWeeklySchedule(
        long chipClusterPtr, DefaultClusterCallback callback, int daysToReturn, int modeToReturn);

    private native void setWeeklySchedule(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int numberOfTransitionsForSequence,
        int dayOfWeekForSequence,
        int modeForSequence,
        int payload);

    private native void setpointRaiseLower(
        long chipClusterPtr, DefaultClusterCallback callback, int mode, int amount);

    public void readLocalTemperatureAttribute(IntegerAttributeCallback callback) {
      readLocalTemperatureAttribute(chipClusterPtr, callback);
    }

    public void readOccupiedCoolingSetpointAttribute(IntegerAttributeCallback callback) {
      readOccupiedCoolingSetpointAttribute(chipClusterPtr, callback);
    }

    public void writeOccupiedCoolingSetpointAttribute(DefaultClusterCallback callback, int value) {
      writeOccupiedCoolingSetpointAttribute(chipClusterPtr, callback, value);
    }

    public void readOccupiedHeatingSetpointAttribute(IntegerAttributeCallback callback) {
      readOccupiedHeatingSetpointAttribute(chipClusterPtr, callback);
    }

    public void writeOccupiedHeatingSetpointAttribute(DefaultClusterCallback callback, int value) {
      writeOccupiedHeatingSetpointAttribute(chipClusterPtr, callback, value);
    }

    public void readControlSequenceOfOperationAttribute(IntegerAttributeCallback callback) {
      readControlSequenceOfOperationAttribute(chipClusterPtr, callback);
    }

    public void writeControlSequenceOfOperationAttribute(
        DefaultClusterCallback callback, int value) {
      writeControlSequenceOfOperationAttribute(chipClusterPtr, callback, value);
    }

    public void readSystemModeAttribute(IntegerAttributeCallback callback) {
      readSystemModeAttribute(chipClusterPtr, callback);
    }

    public void writeSystemModeAttribute(DefaultClusterCallback callback, int value) {
      writeSystemModeAttribute(chipClusterPtr, callback, value);
    }

    public void readStartOfWeekAttribute(IntegerAttributeCallback callback) {
      readStartOfWeekAttribute(chipClusterPtr, callback);
    }

    public void readNumberOfWeeklyTransitionsAttribute(IntegerAttributeCallback callback) {
      readNumberOfWeeklyTransitionsAttribute(chipClusterPtr, callback);
    }

    public void readNumberOfDailyTransitionsAttribute(IntegerAttributeCallback callback) {
      readNumberOfDailyTransitionsAttribute(chipClusterPtr, callback);
    }

    public void readFeatureMapAttribute(LongAttributeCallback callback) {
      readFeatureMapAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readLocalTemperatureAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOccupiedCoolingSetpointAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeOccupiedCoolingSetpointAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readOccupiedHeatingSetpointAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeOccupiedHeatingSetpointAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readControlSequenceOfOperationAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeControlSequenceOfOperationAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readSystemModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeSystemModeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readStartOfWeekAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readNumberOfWeeklyTransitionsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readNumberOfDailyTransitionsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readFeatureMapAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ThermostatUserInterfaceConfigurationCluster extends BaseChipCluster {
    public ThermostatUserInterfaceConfigurationCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readTemperatureDisplayModeAttribute(IntegerAttributeCallback callback) {
      readTemperatureDisplayModeAttribute(chipClusterPtr, callback);
    }

    public void writeTemperatureDisplayModeAttribute(DefaultClusterCallback callback, int value) {
      writeTemperatureDisplayModeAttribute(chipClusterPtr, callback, value);
    }

    public void readKeypadLockoutAttribute(IntegerAttributeCallback callback) {
      readKeypadLockoutAttribute(chipClusterPtr, callback);
    }

    public void writeKeypadLockoutAttribute(DefaultClusterCallback callback, int value) {
      writeKeypadLockoutAttribute(chipClusterPtr, callback, value);
    }

    public void readScheduleProgrammingVisibilityAttribute(IntegerAttributeCallback callback) {
      readScheduleProgrammingVisibilityAttribute(chipClusterPtr, callback);
    }

    public void writeScheduleProgrammingVisibilityAttribute(
        DefaultClusterCallback callback, int value) {
      writeScheduleProgrammingVisibilityAttribute(chipClusterPtr, callback, value);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readTemperatureDisplayModeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeTemperatureDisplayModeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readKeypadLockoutAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeKeypadLockoutAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readScheduleProgrammingVisibilityAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeScheduleProgrammingVisibilityAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class ThreadNetworkDiagnosticsCluster extends BaseChipCluster {
    public ThreadNetworkDiagnosticsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void resetCounts(DefaultClusterCallback callback) {
      resetCounts(chipClusterPtr, callback);
    }

    private native void resetCounts(long chipClusterPtr, DefaultClusterCallback callback);

    public static class NeighborTableListAttribute {
      public long extAddress;
      public long age;
      public int rloc16;
      public long linkFrameCounter;
      public long mleFrameCounter;
      public int lqi;
      public int averageRssi;
      public int lastRssi;
      public int frameErrorRate;
      public int messageErrorRate;
      public boolean rxOnWhenIdle;
      public boolean fullThreadDevice;
      public boolean fullNetworkData;
      public boolean isChild;

      public NeighborTableListAttribute(
          long extAddress,
          long age,
          int rloc16,
          long linkFrameCounter,
          long mleFrameCounter,
          int lqi,
          int averageRssi,
          int lastRssi,
          int frameErrorRate,
          int messageErrorRate,
          boolean rxOnWhenIdle,
          boolean fullThreadDevice,
          boolean fullNetworkData,
          boolean isChild) {
        this.extAddress = extAddress;
        this.age = age;
        this.rloc16 = rloc16;
        this.linkFrameCounter = linkFrameCounter;
        this.mleFrameCounter = mleFrameCounter;
        this.lqi = lqi;
        this.averageRssi = averageRssi;
        this.lastRssi = lastRssi;
        this.frameErrorRate = frameErrorRate;
        this.messageErrorRate = messageErrorRate;
        this.rxOnWhenIdle = rxOnWhenIdle;
        this.fullThreadDevice = fullThreadDevice;
        this.fullNetworkData = fullNetworkData;
        this.isChild = isChild;
      }
    }

    public interface NeighborTableListAttributeCallback {
      void onSuccess(List<NeighborTableListAttribute> valueList);

      void onError(Exception ex);
    }

    public static class RouteTableListAttribute {
      public long extAddress;
      public int rloc16;
      public int routerId;
      public int nextHop;
      public int pathCost;
      public int lQIIn;
      public int lQIOut;
      public int age;
      public boolean allocated;
      public boolean linkEstablished;

      public RouteTableListAttribute(
          long extAddress,
          int rloc16,
          int routerId,
          int nextHop,
          int pathCost,
          int lQIIn,
          int lQIOut,
          int age,
          boolean allocated,
          boolean linkEstablished) {
        this.extAddress = extAddress;
        this.rloc16 = rloc16;
        this.routerId = routerId;
        this.nextHop = nextHop;
        this.pathCost = pathCost;
        this.lQIIn = lQIIn;
        this.lQIOut = lQIOut;
        this.age = age;
        this.allocated = allocated;
        this.linkEstablished = linkEstablished;
      }
    }

    public interface RouteTableListAttributeCallback {
      void onSuccess(List<RouteTableListAttribute> valueList);

      void onError(Exception ex);
    }

    public static class SecurityPolicyAttribute {
      public int rotationTime;
      public int flags;

      public SecurityPolicyAttribute(int rotationTime, int flags) {
        this.rotationTime = rotationTime;
        this.flags = flags;
      }
    }

    public interface SecurityPolicyAttributeCallback {
      void onSuccess(List<SecurityPolicyAttribute> valueList);

      void onError(Exception ex);
    }

    public static class OperationalDatasetComponentsAttribute {
      public boolean activeTimestampPresent;
      public boolean pendingTimestampPresent;
      public boolean masterKeyPresent;
      public boolean networkNamePresent;
      public boolean extendedPanIdPresent;
      public boolean meshLocalPrefixPresent;
      public boolean delayPresent;
      public boolean panIdPresent;
      public boolean channelPresent;
      public boolean pskcPresent;
      public boolean securityPolicyPresent;
      public boolean channelMaskPresent;

      public OperationalDatasetComponentsAttribute(
          boolean activeTimestampPresent,
          boolean pendingTimestampPresent,
          boolean masterKeyPresent,
          boolean networkNamePresent,
          boolean extendedPanIdPresent,
          boolean meshLocalPrefixPresent,
          boolean delayPresent,
          boolean panIdPresent,
          boolean channelPresent,
          boolean pskcPresent,
          boolean securityPolicyPresent,
          boolean channelMaskPresent) {
        this.activeTimestampPresent = activeTimestampPresent;
        this.pendingTimestampPresent = pendingTimestampPresent;
        this.masterKeyPresent = masterKeyPresent;
        this.networkNamePresent = networkNamePresent;
        this.extendedPanIdPresent = extendedPanIdPresent;
        this.meshLocalPrefixPresent = meshLocalPrefixPresent;
        this.delayPresent = delayPresent;
        this.panIdPresent = panIdPresent;
        this.channelPresent = channelPresent;
        this.pskcPresent = pskcPresent;
        this.securityPolicyPresent = securityPolicyPresent;
        this.channelMaskPresent = channelMaskPresent;
      }
    }

    public interface OperationalDatasetComponentsAttributeCallback {
      void onSuccess(List<OperationalDatasetComponentsAttribute> valueList);

      void onError(Exception ex);
    }

    public interface ActiveNetworkFaultsListAttributeCallback {
      void onSuccess(List<Integer> valueList);

      void onError(Exception ex);
    }

    public void readChannelAttribute(IntegerAttributeCallback callback) {
      readChannelAttribute(chipClusterPtr, callback);
    }

    public void readRoutingRoleAttribute(IntegerAttributeCallback callback) {
      readRoutingRoleAttribute(chipClusterPtr, callback);
    }

    public void readNetworkNameAttribute(OctetStringAttributeCallback callback) {
      readNetworkNameAttribute(chipClusterPtr, callback);
    }

    public void readPanIdAttribute(IntegerAttributeCallback callback) {
      readPanIdAttribute(chipClusterPtr, callback);
    }

    public void readExtendedPanIdAttribute(LongAttributeCallback callback) {
      readExtendedPanIdAttribute(chipClusterPtr, callback);
    }

    public void readMeshLocalPrefixAttribute(OctetStringAttributeCallback callback) {
      readMeshLocalPrefixAttribute(chipClusterPtr, callback);
    }

    public void readOverrunCountAttribute(LongAttributeCallback callback) {
      readOverrunCountAttribute(chipClusterPtr, callback);
    }

    public void readNeighborTableListAttribute(NeighborTableListAttributeCallback callback) {
      readNeighborTableListAttribute(chipClusterPtr, callback);
    }

    public void readRouteTableListAttribute(RouteTableListAttributeCallback callback) {
      readRouteTableListAttribute(chipClusterPtr, callback);
    }

    public void readPartitionIdAttribute(LongAttributeCallback callback) {
      readPartitionIdAttribute(chipClusterPtr, callback);
    }

    public void readWeightingAttribute(IntegerAttributeCallback callback) {
      readWeightingAttribute(chipClusterPtr, callback);
    }

    public void readDataVersionAttribute(IntegerAttributeCallback callback) {
      readDataVersionAttribute(chipClusterPtr, callback);
    }

    public void readStableDataVersionAttribute(IntegerAttributeCallback callback) {
      readStableDataVersionAttribute(chipClusterPtr, callback);
    }

    public void readLeaderRouterIdAttribute(IntegerAttributeCallback callback) {
      readLeaderRouterIdAttribute(chipClusterPtr, callback);
    }

    public void readDetachedRoleCountAttribute(IntegerAttributeCallback callback) {
      readDetachedRoleCountAttribute(chipClusterPtr, callback);
    }

    public void readChildRoleCountAttribute(IntegerAttributeCallback callback) {
      readChildRoleCountAttribute(chipClusterPtr, callback);
    }

    public void readRouterRoleCountAttribute(IntegerAttributeCallback callback) {
      readRouterRoleCountAttribute(chipClusterPtr, callback);
    }

    public void readLeaderRoleCountAttribute(IntegerAttributeCallback callback) {
      readLeaderRoleCountAttribute(chipClusterPtr, callback);
    }

    public void readAttachAttemptCountAttribute(IntegerAttributeCallback callback) {
      readAttachAttemptCountAttribute(chipClusterPtr, callback);
    }

    public void readPartitionIdChangeCountAttribute(IntegerAttributeCallback callback) {
      readPartitionIdChangeCountAttribute(chipClusterPtr, callback);
    }

    public void readBetterPartitionAttachAttemptCountAttribute(IntegerAttributeCallback callback) {
      readBetterPartitionAttachAttemptCountAttribute(chipClusterPtr, callback);
    }

    public void readParentChangeCountAttribute(IntegerAttributeCallback callback) {
      readParentChangeCountAttribute(chipClusterPtr, callback);
    }

    public void readTxTotalCountAttribute(LongAttributeCallback callback) {
      readTxTotalCountAttribute(chipClusterPtr, callback);
    }

    public void readTxUnicastCountAttribute(LongAttributeCallback callback) {
      readTxUnicastCountAttribute(chipClusterPtr, callback);
    }

    public void readTxBroadcastCountAttribute(LongAttributeCallback callback) {
      readTxBroadcastCountAttribute(chipClusterPtr, callback);
    }

    public void readTxAckRequestedCountAttribute(LongAttributeCallback callback) {
      readTxAckRequestedCountAttribute(chipClusterPtr, callback);
    }

    public void readTxAckedCountAttribute(LongAttributeCallback callback) {
      readTxAckedCountAttribute(chipClusterPtr, callback);
    }

    public void readTxNoAckRequestedCountAttribute(LongAttributeCallback callback) {
      readTxNoAckRequestedCountAttribute(chipClusterPtr, callback);
    }

    public void readTxDataCountAttribute(LongAttributeCallback callback) {
      readTxDataCountAttribute(chipClusterPtr, callback);
    }

    public void readTxDataPollCountAttribute(LongAttributeCallback callback) {
      readTxDataPollCountAttribute(chipClusterPtr, callback);
    }

    public void readTxBeaconCountAttribute(LongAttributeCallback callback) {
      readTxBeaconCountAttribute(chipClusterPtr, callback);
    }

    public void readTxBeaconRequestCountAttribute(LongAttributeCallback callback) {
      readTxBeaconRequestCountAttribute(chipClusterPtr, callback);
    }

    public void readTxOtherCountAttribute(LongAttributeCallback callback) {
      readTxOtherCountAttribute(chipClusterPtr, callback);
    }

    public void readTxRetryCountAttribute(LongAttributeCallback callback) {
      readTxRetryCountAttribute(chipClusterPtr, callback);
    }

    public void readTxDirectMaxRetryExpiryCountAttribute(LongAttributeCallback callback) {
      readTxDirectMaxRetryExpiryCountAttribute(chipClusterPtr, callback);
    }

    public void readTxIndirectMaxRetryExpiryCountAttribute(LongAttributeCallback callback) {
      readTxIndirectMaxRetryExpiryCountAttribute(chipClusterPtr, callback);
    }

    public void readTxErrCcaCountAttribute(LongAttributeCallback callback) {
      readTxErrCcaCountAttribute(chipClusterPtr, callback);
    }

    public void readTxErrAbortCountAttribute(LongAttributeCallback callback) {
      readTxErrAbortCountAttribute(chipClusterPtr, callback);
    }

    public void readTxErrBusyChannelCountAttribute(LongAttributeCallback callback) {
      readTxErrBusyChannelCountAttribute(chipClusterPtr, callback);
    }

    public void readRxTotalCountAttribute(LongAttributeCallback callback) {
      readRxTotalCountAttribute(chipClusterPtr, callback);
    }

    public void readRxUnicastCountAttribute(LongAttributeCallback callback) {
      readRxUnicastCountAttribute(chipClusterPtr, callback);
    }

    public void readRxBroadcastCountAttribute(LongAttributeCallback callback) {
      readRxBroadcastCountAttribute(chipClusterPtr, callback);
    }

    public void readRxDataCountAttribute(LongAttributeCallback callback) {
      readRxDataCountAttribute(chipClusterPtr, callback);
    }

    public void readRxDataPollCountAttribute(LongAttributeCallback callback) {
      readRxDataPollCountAttribute(chipClusterPtr, callback);
    }

    public void readRxBeaconCountAttribute(LongAttributeCallback callback) {
      readRxBeaconCountAttribute(chipClusterPtr, callback);
    }

    public void readRxBeaconRequestCountAttribute(LongAttributeCallback callback) {
      readRxBeaconRequestCountAttribute(chipClusterPtr, callback);
    }

    public void readRxOtherCountAttribute(LongAttributeCallback callback) {
      readRxOtherCountAttribute(chipClusterPtr, callback);
    }

    public void readRxAddressFilteredCountAttribute(LongAttributeCallback callback) {
      readRxAddressFilteredCountAttribute(chipClusterPtr, callback);
    }

    public void readRxDestAddrFilteredCountAttribute(LongAttributeCallback callback) {
      readRxDestAddrFilteredCountAttribute(chipClusterPtr, callback);
    }

    public void readRxDuplicatedCountAttribute(LongAttributeCallback callback) {
      readRxDuplicatedCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrNoFrameCountAttribute(LongAttributeCallback callback) {
      readRxErrNoFrameCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrUnknownNeighborCountAttribute(LongAttributeCallback callback) {
      readRxErrUnknownNeighborCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrInvalidSrcAddrCountAttribute(LongAttributeCallback callback) {
      readRxErrInvalidSrcAddrCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrSecCountAttribute(LongAttributeCallback callback) {
      readRxErrSecCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrFcsCountAttribute(LongAttributeCallback callback) {
      readRxErrFcsCountAttribute(chipClusterPtr, callback);
    }

    public void readRxErrOtherCountAttribute(LongAttributeCallback callback) {
      readRxErrOtherCountAttribute(chipClusterPtr, callback);
    }

    public void readSecurityPolicyAttribute(SecurityPolicyAttributeCallback callback) {
      readSecurityPolicyAttribute(chipClusterPtr, callback);
    }

    public void readChannelMaskAttribute(IntegerAttributeCallback callback) {
      readChannelMaskAttribute(chipClusterPtr, callback);
    }

    public void readOperationalDatasetComponentsAttribute(
        OperationalDatasetComponentsAttributeCallback callback) {
      readOperationalDatasetComponentsAttribute(chipClusterPtr, callback);
    }

    public void readActiveNetworkFaultsListAttribute(
        ActiveNetworkFaultsListAttributeCallback callback) {
      readActiveNetworkFaultsListAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readChannelAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRoutingRoleAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readNetworkNameAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readPanIdAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readExtendedPanIdAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readMeshLocalPrefixAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readOverrunCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readNeighborTableListAttribute(
        long chipClusterPtr, NeighborTableListAttributeCallback callback);

    private native void readRouteTableListAttribute(
        long chipClusterPtr, RouteTableListAttributeCallback callback);

    private native void readPartitionIdAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readWeightingAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readDataVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readStableDataVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readLeaderRouterIdAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readDetachedRoleCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readChildRoleCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRouterRoleCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readLeaderRoleCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readAttachAttemptCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readPartitionIdChangeCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readBetterPartitionAttachAttemptCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readParentChangeCountAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readTxTotalCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxUnicastCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxBroadcastCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxAckRequestedCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxAckedCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxNoAckRequestedCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxDataCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxDataPollCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxBeaconCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxBeaconRequestCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxOtherCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxRetryCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxDirectMaxRetryExpiryCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxIndirectMaxRetryExpiryCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxErrCcaCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxErrAbortCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readTxErrBusyChannelCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxTotalCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxUnicastCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxBroadcastCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxDataCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxDataPollCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxBeaconCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxBeaconRequestCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxOtherCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxAddressFilteredCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxDestAddrFilteredCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxDuplicatedCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrNoFrameCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrUnknownNeighborCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrInvalidSrcAddrCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrSecCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrFcsCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readRxErrOtherCountAttribute(
        long chipClusterPtr, LongAttributeCallback callback);

    private native void readSecurityPolicyAttribute(
        long chipClusterPtr, SecurityPolicyAttributeCallback callback);

    private native void readChannelMaskAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOperationalDatasetComponentsAttribute(
        long chipClusterPtr, OperationalDatasetComponentsAttributeCallback callback);

    private native void readActiveNetworkFaultsListAttribute(
        long chipClusterPtr, ActiveNetworkFaultsListAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class WakeOnLanCluster extends BaseChipCluster {
    public WakeOnLanCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void readWakeOnLanMacAddressAttribute(CharStringAttributeCallback callback) {
      readWakeOnLanMacAddressAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readWakeOnLanMacAddressAttribute(
        long chipClusterPtr, CharStringAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class WiFiNetworkDiagnosticsCluster extends BaseChipCluster {
    public WiFiNetworkDiagnosticsCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void resetCounts(DefaultClusterCallback callback) {
      resetCounts(chipClusterPtr, callback);
    }

    private native void resetCounts(long chipClusterPtr, DefaultClusterCallback callback);

    public void readBssidAttribute(OctetStringAttributeCallback callback) {
      readBssidAttribute(chipClusterPtr, callback);
    }

    public void readSecurityTypeAttribute(IntegerAttributeCallback callback) {
      readSecurityTypeAttribute(chipClusterPtr, callback);
    }

    public void readWiFiVersionAttribute(IntegerAttributeCallback callback) {
      readWiFiVersionAttribute(chipClusterPtr, callback);
    }

    public void readChannelNumberAttribute(IntegerAttributeCallback callback) {
      readChannelNumberAttribute(chipClusterPtr, callback);
    }

    public void readRssiAttribute(IntegerAttributeCallback callback) {
      readRssiAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readBssidAttribute(
        long chipClusterPtr, OctetStringAttributeCallback callback);

    private native void readSecurityTypeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readWiFiVersionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readChannelNumberAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readRssiAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }

  public static class WindowCoveringCluster extends BaseChipCluster {
    public WindowCoveringCluster(long devicePtr, int endpointId) {
      super(devicePtr, endpointId);
    }

    @Override
    public native long initWithDevice(long devicePtr, int endpointId);

    public void downOrClose(DefaultClusterCallback callback) {
      downOrClose(chipClusterPtr, callback);
    }

    public void goToLiftPercentage(
        DefaultClusterCallback callback, int liftPercentageValue, int liftPercent100thsValue) {
      goToLiftPercentage(chipClusterPtr, callback, liftPercentageValue, liftPercent100thsValue);
    }

    public void goToLiftValue(DefaultClusterCallback callback, int liftValue) {
      goToLiftValue(chipClusterPtr, callback, liftValue);
    }

    public void goToTiltPercentage(
        DefaultClusterCallback callback, int tiltPercentageValue, int tiltPercent100thsValue) {
      goToTiltPercentage(chipClusterPtr, callback, tiltPercentageValue, tiltPercent100thsValue);
    }

    public void goToTiltValue(DefaultClusterCallback callback, int tiltValue) {
      goToTiltValue(chipClusterPtr, callback, tiltValue);
    }

    public void stopMotion(DefaultClusterCallback callback) {
      stopMotion(chipClusterPtr, callback);
    }

    public void upOrOpen(DefaultClusterCallback callback) {
      upOrOpen(chipClusterPtr, callback);
    }

    private native void downOrClose(long chipClusterPtr, DefaultClusterCallback callback);

    private native void goToLiftPercentage(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int liftPercentageValue,
        int liftPercent100thsValue);

    private native void goToLiftValue(
        long chipClusterPtr, DefaultClusterCallback callback, int liftValue);

    private native void goToTiltPercentage(
        long chipClusterPtr,
        DefaultClusterCallback callback,
        int tiltPercentageValue,
        int tiltPercent100thsValue);

    private native void goToTiltValue(
        long chipClusterPtr, DefaultClusterCallback callback, int tiltValue);

    private native void stopMotion(long chipClusterPtr, DefaultClusterCallback callback);

    private native void upOrOpen(long chipClusterPtr, DefaultClusterCallback callback);

    public void readTypeAttribute(IntegerAttributeCallback callback) {
      readTypeAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionLiftAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionLiftAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionTiltAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionTiltAttribute(chipClusterPtr, callback);
    }

    public void readConfigStatusAttribute(IntegerAttributeCallback callback) {
      readConfigStatusAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionLiftPercentageAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionLiftPercentageAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionTiltPercentageAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionTiltPercentageAttribute(chipClusterPtr, callback);
    }

    public void readOperationalStatusAttribute(IntegerAttributeCallback callback) {
      readOperationalStatusAttribute(chipClusterPtr, callback);
    }

    public void readTargetPositionLiftPercent100thsAttribute(IntegerAttributeCallback callback) {
      readTargetPositionLiftPercent100thsAttribute(chipClusterPtr, callback);
    }

    public void readTargetPositionTiltPercent100thsAttribute(IntegerAttributeCallback callback) {
      readTargetPositionTiltPercent100thsAttribute(chipClusterPtr, callback);
    }

    public void readEndProductTypeAttribute(IntegerAttributeCallback callback) {
      readEndProductTypeAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionLiftPercent100thsAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionLiftPercent100thsAttribute(chipClusterPtr, callback);
    }

    public void readCurrentPositionTiltPercent100thsAttribute(IntegerAttributeCallback callback) {
      readCurrentPositionTiltPercent100thsAttribute(chipClusterPtr, callback);
    }

    public void readInstalledOpenLimitLiftAttribute(IntegerAttributeCallback callback) {
      readInstalledOpenLimitLiftAttribute(chipClusterPtr, callback);
    }

    public void readInstalledClosedLimitLiftAttribute(IntegerAttributeCallback callback) {
      readInstalledClosedLimitLiftAttribute(chipClusterPtr, callback);
    }

    public void readInstalledOpenLimitTiltAttribute(IntegerAttributeCallback callback) {
      readInstalledOpenLimitTiltAttribute(chipClusterPtr, callback);
    }

    public void readInstalledClosedLimitTiltAttribute(IntegerAttributeCallback callback) {
      readInstalledClosedLimitTiltAttribute(chipClusterPtr, callback);
    }

    public void readModeAttribute(IntegerAttributeCallback callback) {
      readModeAttribute(chipClusterPtr, callback);
    }

    public void writeModeAttribute(DefaultClusterCallback callback, int value) {
      writeModeAttribute(chipClusterPtr, callback, value);
    }

    public void readSafetyStatusAttribute(IntegerAttributeCallback callback) {
      readSafetyStatusAttribute(chipClusterPtr, callback);
    }

    public void readClusterRevisionAttribute(IntegerAttributeCallback callback) {
      readClusterRevisionAttribute(chipClusterPtr, callback);
    }

    private native void readTypeAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionLiftAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionTiltAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readConfigStatusAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionLiftPercentageAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionTiltPercentageAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readOperationalStatusAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readTargetPositionLiftPercent100thsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readTargetPositionTiltPercent100thsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readEndProductTypeAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionLiftPercent100thsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readCurrentPositionTiltPercent100thsAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readInstalledOpenLimitLiftAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readInstalledClosedLimitLiftAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readInstalledOpenLimitTiltAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readInstalledClosedLimitTiltAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readModeAttribute(long chipClusterPtr, IntegerAttributeCallback callback);

    private native void writeModeAttribute(
        long chipClusterPtr, DefaultClusterCallback callback, int value);

    private native void readSafetyStatusAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);

    private native void readClusterRevisionAttribute(
        long chipClusterPtr, IntegerAttributeCallback callback);
  }
}
